Cherrypy-presentation-layer
CherryPy-プレゼンテーション層
プレゼンテーション層は、通過する通信が目的の受信者を確実に対象とするようにします。 CherryPyは、さまざまなテンプレートエンジンによるプレゼンテーション層の機能を維持しています。
テンプレートエンジンは、ビジネスロジックの助けを借りてページの入力を取得し、目的の対象者のみを対象とする最終ページに処理します。
キッド—テンプレートエンジン
*Kid* は、処理されるテンプレートの名前(必須)と、テンプレートのレンダリング時に渡されるデータの入力を含む単純なテンプレートエンジンです。
テンプレートを初めて作成すると、Kidはテンプレートのキャッシュバージョンとして提供できるPythonモジュールを作成します。
*kid.Template* 関数は、出力コンテンツのレンダリングに使用できるテンプレートクラスのインスタンスを返します。
テンプレートクラスは、コマンドの次のセットを提供します-
S.No | Command & Description |
---|---|
1. |
serialize 出力コンテンツを文字列として返します。 |
2. |
generate 出力コンテンツをイテレーターとして返します。 |
3. |
write 出力コンテンツをファイルオブジェクトにダンプします。 |
これらのコマンドで使用されるパラメータは次のとおりです-
S.No | Command & Description |
---|---|
1. |
encoding 出力コンテンツをエンコードする方法を通知します |
2. |
fragment これは、XMLプロローグまたはDoctypeに伝えるブール値です |
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')
子供の属性
以下はキッドの属性です-
XMLベースのテンプレート言語
XMLベースの言語です。 Kidテンプレートは、適切な命名規則を持つ整形式のXMLドキュメントである必要があります。
KidはXML要素内に属性を実装して、要素に到達するために従うアクションの基礎となるエンジンを更新します。 XMLドキュメント内の他の既存の属性と重複しないように、Kidは独自の名前空間を導入しています。
<p py:if = "...">...</p>
可変置換
Kidには、変数置換スキームと単純なアプローチ、$ \ {variable-name}が付属しています。
変数は、要素の属性で使用することも、要素のテキストコンテンツとして使用することもできます。 キッドは、実行が行われるたびに変数を評価します。
ユーザーがリテラル文字列の出力を$ \ {something}として必要とする場合、変数置換を使用して、ドル記号を2つ重ねることでエスケープできます。
条件文
テンプレート内のさまざまなケースを切り替えるには、次の構文が使用されます-
<tag py:if = "expression">...</tag>
ここで、タグは要素の名前、たとえばDIVまたはSPANです。
式はPython式です。 ブール値としてTrueと評価される場合、要素は出力コンテンツに含まれます。そうでない場合、出力コンテンツの一部にはなりません。
ループ機構
キッドの要素をループするには、次の構文が使用されます-
<tag py:for = "expression">...</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')
ループ機構を備えた上記のコードの*出力*は次のとおりです-