- CherryPy 教程
- CherryPy - 首页
- CherryPy - 简介
- CherryPy - 环境搭建
- CherryPy - 词汇表
- 内置HTTP服务器
- CherryPy - 工具箱
- CherryPy - 一个可运行的应用
- CherryPy - Web服务
- CherryPy - 表现层
- CherryPy - Ajax的使用
- CherryPy - 演示应用
- CherryPy - 测试
- 应用部署
- CherryPy 有用资源
- CherryPy - 快速指南
- CherryPy - 有用资源
- CherryPy - 讨论
CherryPy - 表现层
表现层确保通过它的通信能够到达预期的接收者。CherryPy 通过各种模板引擎来维护表现层的运作。
模板引擎借助业务逻辑获取页面的输入,然后将其处理成最终页面,该页面只面向目标受众。
Kid — 模板引擎
Kid是一个简单的模板引擎,它包含要处理的模板名称(这是必须的)以及渲染模板时要传递的数据输入。
首次创建模板时,Kid会创建一个Python模块,该模块可以作为模板的缓存版本。
kid.Template函数返回模板类的实例,可用于渲染输出内容。
模板类提供以下命令集:
| 序号 | 命令及描述 |
|---|---|
| 1. | serialize 它将输出内容作为字符串返回。 |
| 2. | generate 它将输出内容作为迭代器返回。 |
| 3. | write 它将输出内容转储到文件对象中。 |
这些命令使用的参数如下:
| 序号 | 命令及描述 |
|---|---|
| 1. | encoding 它指示如何编码输出内容 |
| 2. | fragment 这是一个布尔值,指示是否包含XML序言或文档类型声明 |
| 3. | output 这种类型的序列化用于渲染内容 |
示例
让我们来看一个例子,了解kid是如何工作的:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns:py = "http://purl.org/kid/ns#">
<head>
<title>${title}</title>
<link rel = "stylesheet" href = "style.css" />
</head>
<body>
<p>${message}</p>
</body>
</html>
The next step after saving the file is to process the template via the Kid engine.
import kid
params = {'title': 'Hello world!!', 'message': 'CherryPy.'}
t = kid.Template('helloworld.kid', **params)
print t.serialize(output='html')
Kid 的属性
以下是 Kid 的属性:
基于XML的模板语言
它是一种基于XML的语言。Kid模板必须是一个格式良好的XML文档,并具有正确的命名约定。
Kid在XML元素内实现属性,以更新底层引擎,使其按照到达元素的操作进行。为了避免与XML文档中其他现有属性重叠,Kid引入了自己的命名空间。
<p py:if = "...">...</p>
变量替换
Kid带有一个变量替换方案和一个简单的方法——${variable-name}。
变量既可以用于元素的属性中,也可以用作元素的文本内容。Kid将在每次执行时评估变量。
如果用户需要${something}作为字面字符串的输出,可以通过将美元符号加倍来转义变量替换。
条件语句
为了在模板中切换不同的情况,使用以下语法:
<tag py:if = "expression">...</tag>
这里,tag是元素的名称,例如DIV或SPAN。
表达式是一个Python表达式。如果它作为布尔值计算结果为True,则该元素将包含在输出内容中,否则将不会是输出内容的一部分。
循环机制
为了在Kid中循环元素,使用以下语法:
<tag py:for = "expression">...</tag>
这里,tag是元素的名称。表达式是一个Python表达式,例如for value in [...]。
示例
以下代码显示了循环机制是如何工作的:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>${title}</title>
<link rel = "stylesheet" href = "style.css" />
</head>
<body>
<table>
<caption>A few songs</caption>
<tr>
<th>Artist</th>
<th>Album</th>
<th>Title</th>
</tr>
<tr py:for = "info in infos">
<td>${info['artist']}</td>
<td>${info['album']}</td>
<td>${info['song']}</td>
</tr>
</table>
</body>
</html>
import kid
params = discography.retrieve_songs()
t = kid.Template('songs.kid', **params)
print t.serialize(output='html')
使用循环机制的上述代码的输出如下: