表示層確保通過它的通信以預期的接收者爲目標。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 −