2006年12月22日
Pythonのテンプレートエンジン
最近PythonでCGIも書いているのですが、Python用のテンプレートエンジンが使いづらい。ググると沢山出てきますが、どれもテンプレート内にPythonのコードが書けない。PythonのWebフレームワーク「Django」も、独自のテンプレート言語を使わなければならず、Pythonコードを直接書けないので非常に使いづらい。
AzaraCを使ってていいなーと思うのも結局テンプレート内にがしがしコードを書ける所。もうC++でやりたい放題なわけですよ。STLとかがんがん使ってページを生成するわけですよ。流石にテンプレート内にkmpとかいう関数があった時はびっくりしましたが。
Django方式だとテンプレート内にif len(hoge) > 0とか書きたい場合、len等のPythonの関数もテンプレート内には原則として書けないので、ロジック側で context = { "hogeflag" : len(hoge) > 0 } と定義してからテンプレート側で "hogeflag"を使用しなければいけない。これは eRuby とか見た人間からすると凄い鬱陶しい。
「だから速度が出る」とか「デザイナーはコード書かれてもわからへんねん」と言われたらそれまでなのだが、もうちょっと何とかならないんですかね。やっぱりインデントの問題ですか?
素敵なアイデアがあればいいんだけど。
- by
- at 06:02

comments
Djangoの思想では、ロジカルなものをテンプレート上に表現したい場合はカスタムタグを定義します。
ifタグも同じ要領で実装されていますので、容易に作れます。
テンプレートシステム的な制限ではありません。
美しくないので、デフォルトでは用意されていないのです。
if len(hoge) > 0:は既存のタグで表現できますので、ただの例だということはわかりますが。
まぁ、直接すぐにかけないというのはその通りです。
デザイナーはコードを書かれるとわからないのではなく、表示部分はデザイナが全部書くんです。
それに、テンプレートにがんがんPythonコードを書けるものがたくさんありますよ。
コメント有難うございます。
すいません、Djangoを例に出したのが悪かったですね。
Djangoはデザイナーとの分業をするためにああいう設計になっているというのは知っていたのですが、「テンプレート内にPythonコードを原理的にかけるのか」という所に疑問を投げかける例に使ってしまいました。
> デザイナーはコードを書かれるとわからないのではなく、表示部分はデザイナが全部書くんです。
デザイナーと分業するようなでかいものを書いたことが無い or デザイナーのイラレファイルから自分でhtmlに落とすのでちょっとこの感覚が分からないんですよね...。
> それに、テンプレートにがんがんPythonコードを書けるものがたくさんありますよ。
おお。ちょっと調べてみます。
情報有難うございますm(_ _)m
直接書く例としては、mod_pythonのテンプレート、ViewCVS/ViewVCの独自テンプレートシステム、ZopeのPage Templateなんかがありますね。