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

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

 2007-03-29 12:19:25 来源:WEB开发网   
核心提示: 清单 7. 使用 #for 指令在列表上进行迭代definition = """Hello, $user.firstName.Your order (#$order.id) has shipped:#for $purchased, $quantity in $

清单 7. 使用 #for 指令在列表上进行迭代

definition = """Hello, $user.firstName.
Your order (#$order.id) has shipped:
#for $purchased, $quantity in $order.purchased.items():
$purchased.name: $quantity unit(s)
#end for
Your tracking number is $order.trackingNumber."""
print Template(definition, searchList=[{'user' : dummyUser,
              'order' : dummyOrder}])

此代码与以前的代码完全相同,但模板定义是不同的。#for 指令启动了一个循环,而 #end for 指令结束了这个循环。因为可以用 Cheetah 生成空白空间很重要的文本(比如电子邮件消息),所以 Cheetah 无法像 Python 所做的那样,将空白空间用作流控制机制,因此它要使用 #end 指令。

#for 迭代的作用类似于使用 Python 的 for 关键字的 Python 迭代。此迭代的作用完全类似于上面所示的手工编写的 Python 迭代:

for purchased, quantity in order.items():
   l.append(purchased.name)
   ...

在手工编写的 Python 代码中,必须将每个输出项手工添加到输出字符串的列表 l 中。Cheetah 使得下列事情变得更轻松:它评估 #for 循环中的代码,并自动将每个迭代的输出附加到模板的输出中。

Cheetah 还提供了一个 #while/#end while 指令,该指令等同于 Python 的 while 构造。

流控制:#if 指令

您已经创建了一个重新生成上述电子邮件的 Cheetah 模板。现在,让我们对它稍微做一下改进。这封电子邮件说您订购了“1 单位”的蓝色装饰品。如果您只订购一件东西或者订购“x 单位”的其他东西,那么更改模板使其说出“1 单位”应该不是很困难。Cheetah 提供了一个 #if 指令,该指令允许您设置 if-then-else 条件。以下是一个 Cheetah 的模板,它试图正确处理复数。Python 代码总是相同的,因此,以下代码只显示了新的模板定义:

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:使用 Python Cheetah

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