表示层确保通过它的通信以预期的接收者为目标。CherryPy通过各种模板引擎维护表示层的工作。
模板引擎在业务逻辑的帮助下获取页面的输入,然后将其处理到只针对预期受众的最终页面。
Kid — The Template Engine
Kid是一个简单的模板引擎,它包括待处理模板的名称(这是必需的)和呈现模板时要传递的数据的输入。
在第一次创建模板时,Kid创建了一个Python模块,该模块可以用作模板的缓存版本。
函数返回模板类的一个实例,该实例可用于呈现输出内容。
template类提供了以下一组命令−
S.No | Command & Description |
---|---|
1. | 序列化 它将输出内容作为字符串返回。 |
2. | 产生 它将输出内容作为迭代器返回。 |
3. | 写 它将输出内容转储到文件对象中。 |
这些命令使用的参数如下−
S.No | Command & Description |
---|---|
1. | 编码 它通知如何对输出内容进行编码 |
2. | 碎片 它是一个布尔值,告诉XML prolog或Doctype |
3. | 输出 这种类型的序列化用于呈现内容 |
Example
让我们举一个例子来了解孩子是如何工作的;
<!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's Attributes
以下是Kid的属性;
XML-Based Templating Language
它是一种基于XML的语言。Kid模板必须是具有正确命名约定的格式良好的XML文档。
Kid在XML元素中实现属性,以更新到达该元素所遵循的操作的底层引擎。为了避免与XML文档中的其他现有属性重叠,Kid引入了自己的名称空间。
<p py:if = "...">...</p>
Variable Substitution
Kid提供了一个变量替换方案和一个简单的方法-${variable name}。
变量可以用于元素的属性中,也可以用作元素的文本内容。Kid将在每次执行时计算变量。
如果用户需要将文本字符串输出为${something},则可以使用变量替换将美元符号加倍来对其进行转义。
Conditional Statement
为了在模板中切换不同的情况,使用了以下语法−
<tag py:if = "expression">...</tag>
这里,tag是元素的名称,例如DIV或SPAN。
表达式是一个Python表达式。如果作为布尔值,它的计算结果为True,则元素将包含在输出内容中,否则它将不是输出内容的一部分。
Looping Mechanism
为了循环Kid中的元素,使用了以下语法−
<tag py:for = "expression">...</tag>
这里,tag是元素的名称。表达式是一个Python表达式,例如,[…]中的值。
Example
下面的代码演示循环机制是如何工作的;
<!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')
The 输出 for the above code with the looping mechanism is as follows −