WEB开发网
开发学院软件开发Python 使用 Python 和 Cheetah 构建和扩充模板 阅读

使用 Python 和 Cheetah 构建和扩充模板

 2007-03-29 12:19:25 来源:WEB开发网   
核心提示: 大多数模板系统(包括 Cheetah 及其 #include 指令)都允许您从另一个模板调用一个模板,您可以使用这项功能,使用 Python 和 Cheetah 构建和扩充模板(10),将常见的模板内容移入(例如)Header.tmpl 和 Footer.tmpl 文件中,不过,Cheet

大多数模板系统(包括 Cheetah 及其 #include 指令)都允许您从另一个模板调用一个模板。您可以使用这项功能,将常见的模板内容移入(例如)Header.tmpl 和 Footer.tmpl 文件中。不过,Cheetah 还允许使用一种更好的方法来解决这个问题:通过使模板进行细分成为可能。

以下是 Skeleton.tmpl,是定义了一个 THML 页的主干的模板定义,但它很明显地留下了两个项没有进行绑定:$title 和 $body:

清单 12. Skeleton.tmpl 的模板定义

<html>
<head><title>$title</title></head>
<body>
<p>[You are logged in as $user.getFullName().]</p>
$body
<hr />
Served by Online Store v1.0.
</body>
</html>

回忆一下前面的内容,我们通过在 Skeleton.tmpl 文件上运行 cheetah compile 命令生成了 Skeleton.py,这是一个包含称作 Skeleton 的 Python 类的包,这个包的作用类似于 Skeleton.tmpl。一旦文件准备就绪,就可以编写定单状态模板了。OrderStatusII.tmpl 可以导入生成的 Skeleton 类并对其进行细分。您还可以定义 $title 和 $body 的值,以及主模板中引用的变量:

清单 13. 细分 Skeleton.tmpl

#from Skeleton import Skeleton
#extends Skeleton
#def title
Status for order #$order.id
#end def
#def body
<p>
#if ($order.hasShipped())
Your order has shipped. Your tracking number is $order.trackingNumber.
#else
Your order has not yet shipped.
#end if
</p>
<p>Order #$order.id contains the following items:</p>
<ul>
#for $purchased, $quantity in $order.purchased.items():
<li>$purchased.name: $quantity unit#slurp
#if ($quantity != 1)
s
#end if
</li>
#end for
</ul>
#end def

OrderStatusII.tmpl 使用 #extends 指令来声明其模板是 Skeleton.tmpl 中定义的模板的一个特例。然后,它使用 #extends 指令定义称为 title 和 body 的函数。这些函数对应于主干模板中使用的 $title 和 $body 变量。它们不会在这里 #set(设置)$title 和 $body 的值: #set 指令设置 Python 变量的值,但 title 和 body 则需要对应于 Python 函数。

在 Python 中使用 def 关键字时,还可以使用 Cheetah 的 #def 指令在模板内部定义函数。然后,可以多次调用该模板,从而避免复制和粘贴代码。

结束语

Cheetah 提供了比这里描述的更多的特性。例如,您可以设置一个筛选器,以某种特定的方式修改所有变量引用的输出。还可以使用 #import 指令将任意 Python 模块导入 Cheetah 模板中,并调用它们的函数。实际上,几乎在 Python 中可以所做的所有事情都能在 Cheetah 中实现。

不过,建议您使所有事情尽量简单。请记住,模板系统的目标是将文档的动态部分与其静态部分分离。从将应用程序代码放入 Cheetah 模板开始,您会发现自己遇到同样头疼的问题 —— 迫使编程人员和 UI 设计人员首先选择模板系统。Cheetah 哲学的一个方面是:“Python 适用于后端,Cheetah 适用于前端。”根据这一经验法则,您应该畅通无阻地获取模板系统的好处。

上一页  5 6 7 8 9 10 

Tags:使用 Python Cheetah

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接