Discreet Blog 12.11.2009

Daily Link 2009-11-12

早起きしても Nevow

今どきの 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 のコードです。

posted at 11:54:56    #

LOST

照明が暗くなり、ステージ上に Wire のメンバーが登場する。ステージに向かって左手は Graham Lewis、中央後方は Robert Grey(Gotobed)、右手が Margaret Fiedler McGinnis。彼女は Wire のツアーを自らの環境保護運動の一環として位置付け参加している。そして中央は Colin Newman。数年前から Colin Newman 役を本人に代わって Michael Emerson がつとめているのは誰もが知るところだ。

スポットライトが点き、Colin がシャウトする。

「ワン、ツー、スリー、ストップ!」

一瞬の静寂の後、会場割れんばかりの拍手。

完璧。

posted at 11:14:24    #
11月 2009
       1
2 3 4 5 6 7 8
9101112131415
16171819202122
23242526272829
30      
7月
2009
 12月
2009

Yasushi Iwata のウェブログです。

XML-Image Letterimage

© 2009-2010, Yasushi Iwata