使用 Python 和 Cheetah 构建和扩充模板
2007-03-29 12:19:25 来源:WEB开发网核心提示: Hello, $user.firstName.Your order (#$order.id) has shipped:在这个文件上运行 cheetah compile Greeting.tmpl 将生成一个称为 Greeting.py 的模块,这个类包含一个称为 Greeting 的类,使
Hello, $user.firstName.
Your order (#$order.id) has shipped:
在这个文件上运行 cheetah compile Greeting.tmpl 将生成一个称为 Greeting.py 的模块。这个类包含一个称为 Greeting 的类,后者实现的代码非常类似于文章开始部分手工编写的代码:
手工代码
l.append('Hello, ')
l.append(
dummyUser.firstName)
l.append('. Your
order (#')
l.append(str(
dummyOrder.id))
l.append(') has
shipped: ')
Cheetah 生成的代码write('Hello, ')
write(filter(VFFSL(SL,
"user.firstName",
True), rawExpr=
'$user.firstName'))
write('. Your
order (#')
write(filter(VFFSL(SL,
"order.id",True),
rawExpr=
'$order.id'))
write(') has
shipped:')
然后,您可以在 Python 中使用生成的 Greeting 类,就像您已经使用 Greeting.tmpl 的内容定义了一个通用 Template 一样:
from Greeting import Greeting
print Greeting(searchList=[{'user' : dummyUser, 'order' : dummyOrder}])
因为 Cheetah 可以将模板文件编译成 Python 代码,所以您可以预先解析所有模板,并在使用动态数据扩充代码时,从已编译的代码中获得好处。
流控制:#for 指令
在生成示例模板的第一部分时,Cheetah 比 Python 的内置模板系统更好用。它还处理模板的其余部分,而这些部分是内置系统根本无法处理的。除了变量引用之外,Cheetah 模板定义还包含针对 Cheetah 解释器的指令,其中包括设置循环的 #for 指令:
更多精彩
赞助商链接