|
今どきの Web アプリケーション開発用のツールとして真っ先に挙がってくるのがテンプレートエンジンというやつです。(Divmod, Inc の解散により存亡の岐路に立たされている) Nevow も XML ベースのテンプレートエンジンを備えているんですが、それよりも先ず紹介すべきなのは stan。S 式風の構文でXML/XHTML を表現する仕組みです。こんな風に HTML を生成します。
>>> from nevow import stan
>>> html = stan.Tag("html")[
... stan.Tag("h1")["HTMLです"],
... stan.Tag("p")["本当です"]
... ]
一瞬何これ?に見えますが、上記のコードで入れ子状の stan.Tag オブジェクトが生成されます。
>>> html
Tag('html', children=[Tag('h1', children=['HTML\xe3\x81\xa7\xe3\x81\x99']),
Tag('p', children=['\xe6\x9c\xac\xe5\xbd\x93\xe3\x81\xa7\xe3\x81\x99'])])
これを平坦化すると HTML が得られます。
>>> from nevow.flat import flatten
>>> print flatten(html)
<html><h1>HTMLです</h1><p>本当です</p></html>
タグにアトリビュートを付けたいときは次のように書きます。
>>> a = stan.Tag("a")(href="http://jp.youtube.com/watch?v=ODshB09FQ8w")["Spam"]
>>> print flatten(a)
<a href="http://jp.youtube.com/watch?v=ODshB09FQ8w">Spam</a>
既に気付いているかもしれませんが、これらは __getitem__ と __call__ を悪用することで実現されています。
HTML 用のタグ生成用の仕組みは予め nevow.tags として用意されているので、こっちを使った方が便利です。
>>> from nevow import tags as T
>>> html = T.html[
... T.head[
... T.title["HTMLです"],
... ],
... T.body[
... T.h1["HTMLです"],
... T.p[
... "本当です。でも HTML は",
... T.strong["1行も書いていません"]
... ]
... ]
... ]
あんまり Python のコードに見えませんが Python のコードです。
|