Kidテンプレートの簡単な紹介

Kidは名前空間の属性を持ついろんなXMLドキュメントをテンプレート化することができます。実際あなたのテンプレートも適切なHTMLドキュメントへと変換処理されることでしょう。

以下の例はKidがどのようなものかを見せてくれます(Kidのドキュメントより):

<?python
title = "A Kid Test Document"
fruits = ["apple", "orange", "kiwi", "M&M"]
from platform import system
?>
<html xmlns:py="http://purl.org/kid/ns#">
  <head>
    <title py:content="title">This is replaced.</title>
  </head>
  <body>
    <p>These are some of my favorite fruits:</p>
    <ul>
      <li py:for="fruit in fruits">
        I like ${fruit}s
      </li>
    </ul>
    <p py:if="system() == 'Linux'">
      Good for you!
    </p>
  </body>
</html>

Kidテンプレートに関する重要な点は:

  • (上記の <html> タグ内で行われているように) py XML名前空間を定義することを忘れないでください。これはテンプレートに適切なXMLであると認識させるためのキーポイントとなります。
  • ${} はPythonの表現をドキュメントのどこであっても簡単に代入してくれます。
  • $foo は変数fooに置き換わりますが、{}を使うほど安全ではありません。何故ならどこでその置換が終わっているのかを検出するのが難しいからです。
  • これはXHTMLです。すなわち すべての タグを閉じる必要があります。例えば改行のために <br> を書こうとするかもしれませんが、XHTMLでは <br/> と書く必要があります。これはHTMLに適切に変換されるでしょう。
  • テンプレートは適切なXMLを必要とするので、JavaScriptを書くときはそのスクリプトを <[CDATA[ javascript here ]]> というように囲んでやる必要があります。
  • Kidテンプレートにはいくつかの予約語があります: write, serializer, serialize, generate, initialize, pull, content, transform です。これらの単語をテンプレートの変数名として使用するとエラーになります。

Kidのすばらしい点は、あなたがPythonについて知っていることのすべてをそこで使うことができることです。KidテンプレートはPythonコードにコンパイルされるので、何がどのように振る舞うのかを予測することが簡単です。例えば py:for="fruit in fruits" はPythonで for fruit in fruits: としたときのように振る舞います。

コントローラによって返された辞書の中で定義した変数も利用できます。すべての py 属性の中では、Pythonでローカル変数を扱うように、辞書から変数を使うことができます。例えば py:for="fruit in fruits" では fruits は辞書を介して渡される繰り返しのオブジェクトになります。

変数がテンプレートの中で出力される場合には、Kidは自動的にそれらをエスケープします。例えば "<" を含むような値を実行する場合にも頭を悩ませることはないです。注意しなければならないのはXHTMLを出力するときです。そうしたいときはそれを XML() で囲んでください。例えば、 header というXHTMLを出力したいときには、 ${XML(header)} とすればそのheaderはエスケープせずに出力されます。

ここですべてを語るよりも、 Kidアトリビュート言語リファレンス を読んでもらう方が有益でしょう。

Previous: モデルを使う : Next: テンプレートで変数を使う