- 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')
使用迴圈機制的上述程式碼的輸出如下: