TurboGears: Kid Template System

TurboGearsのサイトにあるKidドキュメント(http://www.turbogears.org/about/kid.html)の超訳

Kid

デザイナーとプログラマーの両方にフレンドリーなテンプレート

あなたのデザイナーは、あなたにKidを使って欲しいと熱望するでしょう。Kidはただ、あなたが他の物を入れるようなXHTMLを提供するだけです。そのデザインはサンプルデータを持つ事ができ、後に実際のデータによって置き換えられます。

すべての人がデザイナーと一緒に作業をするわけではありませんが、もちろんそれでもかまいません。Kidはプログラマーに対してもフレンドリーなのです。

ちょうどPythonのように

もしあなたがPythonのままで出力しようとしていたとすると、こんなふうにするかもしれません:

print "<table>"
for person in people:
print "<tr>"
print "<td>%s</td>" % (person.name)
print "</tr>"
print "</table>"

これがKidのテンプレートだと、こんな感じなります:

<table>
<tr py:for="person in people">
<td><span py:content="person.name">Kevin Bacon</span></td>
</tr>
</table>

Kidの「for」や「if」というコマンドの表現は、まさにPythonです!また上記の例は、エディタやブラウザで見られるようなステキなサンプルを含んだ「デザイナーフレンドリーな」形式であるということにも注目です。もしあなたが望めば、余計なspanタグよりも簡単に「${person.name}」とすることもできます。

一貫したテンプレートを適用する

最近はアプリケーションに一貫したスタイルを適用するためにCSSを使うようになりましたが、他にも一貫したヘッダやフッタのためのメカニズムが必要でしょう。Kidはこのために2つの方法を提供してくれます。

テンプレートの継承

あなたは以下のようなマスターテンプレートの「テンプレート機能」でヘッダを生成できます:

<div py:def="header(title)">
<h1>${title}</h1>
<p>Here is yet another groovy page of ours.</p>
</div>

あなたの個別テンプレートはこのマスターテンプレートを「拡張」し、ヘッダを挿入するための機能を呼び出すでしょう。

<div py:replace="header('Foo!')">This will go away and be replaced by the header.</div>

マッチング

Kidには、XSLTのシンタクスなしにいくつかのXSLTの機能を与えてくれるすばらしい機能、「マッチング」コマンドがあります。前述した例のように、あなたのテンプレートはマスターテンプレートを拡張するでしょう。しかし、ヘッダ機能を明示的に呼び出すよりも、マッチングを通してマスターテンプレートがそのヘッダを追加する方がよいでしょう。

<body py:match="item.tag == '{http://www.w3.org/1999/xhtml}body'">
<h1>${title}</h1>
<p>Here is yet another groovy page of ours.</p>
<div py:replace="item[:]">

マスターテンプレートに上記のコードを挿入すれば、あとはそれぞれのページに対するマスターテンプレートを拡張するだけです。ヘッダは(そして望むならばフッタも)自動的に追加されます。さらに、必要であれば、他の変更も行う事ができます。

どーしてもテンプレートの中でコードを書きたい

そうしなければならないなら、どうぞ。Kidはあなたに必要な事をさせてくれます。Kidでは<?python?>で囲むことによって、Pythonを直接テンプレートの中に書き込むことができます。それでもXHTMLはvalidなままです。

Kidはゴミを出しません

多くのテンプレートシステムでは、タグをミスマッチな状態にしておくことが可能になっています。KidにおいてはあなたのテンプレートはvalidなXMLになります。つまりあなたは、ミスマッチなタグが存在しないことを保証されているのです。たくさんのブラウザはXHTMLを正しくサポートしていません。あなたのコンテンツがウェブブラウザに送られる際には、TurbogearsはあなたのXTMLテンプレートに基づいたHTMLとあなたのデータを出力してくれるでしょう。

Kidのスゲーところ

Python的で、XMLに基づいたテンプレートであること。

何がそんなにスゲーの?

スタンダードなXHTMLによって、デザイナーはテンプレートが使いやすくなります。プログラミングシンタクスはPythonプログラマーにとっては朝飯前ほどの簡単さです。またXSLTライクな「match」コマンドも備えています。そして文法的に正しい出力をします。

Webサイト

http://kid.lesscode.org/