CherryPy教程

CherryPy 表示层

表示层确保通过它的通信以预期的接收者为目标。 CherryPy 通过各种模板引擎维护表示层的工作。
模板引擎在业务逻辑的帮助下获取页面的输入,然后将其处理为仅针对目标受众的最终页面。

Kid — 模板引擎

Kid 是一个简单的模板引擎,它包括要处理的模板的名称(这是必填项)和模板渲染时要传递的数据的输入。
在第一次创建模板时,Kid 创建了一个 Python 模块,可以作为模板的缓存版本。
kid.Template 函数返回可用于呈现输出内容的模板类​​的实例。
模板类提供以下命令集-
S.No 命令和说明
1.
serialize
它以字符串形式返回输出内容。
2.
generate
它将输出内容作为迭代器返回。
3.
write
它将输出内容转储到文件对象中。
这些命令使用的参数如下-
S.No 命令和说明
1.
encoding
它通知如何对输出内容进行编码
2.
fragment
它是一个布尔值,告诉 XML prolog 或 Doctype
3.
输出
这种类型的序列化用于渲染内容

示例

让我们举个例子来了解 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 表达式,例如 [...] 中的值。

示例

以下代码展示了循环机制的工作原理-
<!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')
具有循环机制的上述代码的 输出如下-
循环输出
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4