自己紹介

太田一樹。
東京の大学の情報科学科に通う大学生。moratorium満喫中。

お勧め書籍 [全部見る]

飾り

Search


Category Archives

Recent Entries

  1. 論文
  2. JJUG CCCでプレゼンします
  3. kzk's bookshelf
  4. En Google by Gulfweed
  5. PNUTS
  6. コメントスパム対策
  7. Hadoop + Luceneで分散インデクシング
  8. Hadoopの解析資料
  9. Cluster 2008
  10. SWoPP 2008

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 とか見た人間からすると凄い鬱陶しい。

「だから速度が出る」とか「デザイナーはコード書かれてもわからへんねん」と言われたらそれまでなのだが、もうちょっと何とかならないんですかね。やっぱりインデントの問題ですか?

素敵なアイデアがあればいいんだけど。


trackbacks

trackbackURL:

Pythonで使えるテンプレートエンジン from Kawasaq通信

Django を使ってごにょごにょやっているなかで、自分がいま必要としているのは、DjangoのようなWeb アプリケーションのフレームワークではなくて、...

comments

Djangoの思想では、ロジカルなものをテンプレート上に表現したい場合はカスタムタグを定義します。
ifタグも同じ要領で実装されていますので、容易に作れます。
テンプレートシステム的な制限ではありません。
美しくないので、デフォルトでは用意されていないのです。
if len(hoge) > 0:は既存のタグで表現できますので、ただの例だということはわかりますが。
まぁ、直接すぐにかけないというのはその通りです。

デザイナーはコードを書かれるとわからないのではなく、表示部分はデザイナが全部書くんです。
それに、テンプレートにがんがんPythonコードを書けるものがたくさんありますよ。

  • everes
  • 2006年12月22日 11:19

コメント有難うございます。

すいません、Djangoを例に出したのが悪かったですね。

Djangoはデザイナーとの分業をするためにああいう設計になっているというのは知っていたのですが、「テンプレート内にPythonコードを原理的にかけるのか」という所に疑問を投げかける例に使ってしまいました。

> デザイナーはコードを書かれるとわからないのではなく、表示部分はデザイナが全部書くんです。
デザイナーと分業するようなでかいものを書いたことが無い or デザイナーのイラレファイルから自分でhtmlに落とすのでちょっとこの感覚が分からないんですよね...。

> それに、テンプレートにがんがんPythonコードを書けるものがたくさんありますよ。
おお。ちょっと調べてみます。

情報有難うございますm(_ _)m

  • kzk
  • 2006年12月22日 16:29

直接書く例としては、mod_pythonのテンプレート、ViewCVS/ViewVCの独自テンプレートシステム、ZopeのPage Templateなんかがありますね。

  • okuji
  • 2006年12月24日 00:14
comment form
comment form