現在位置: ホーム ブログ Pythonのテンプレートエンジン比較
ブログ

Pythonのテンプレートエンジン比較

最近、Plone Foundation より Advisory Board Members に指名された寺田です。Advisory Boardについては別途エントリーにし報告します。

Python Webアドベントカレンダーの20日目のエントリーとなります。Python製のテンプレートエンジンについて簡単に比較をしたいと思います。

(並び順は私の使用経験に基づくものです)

 

ZPT: Zope Page Template

Zope標準のテンプレートエンジンです。私が普段使っているPloneでも使われています。

XML型で、アトリビュートで表現していきます。XMLですので、XHTMLを崩さずに表現でき、テンプレートのままWebブラウザで表示しても崩れずに表示してくれます。

私は、XML型テンプレートが綺麗でいいと思っています。しかしアトリビュートを書くのは面倒な場面もあります。例えば、 <img src="${val}" /> とは書けず、 <img src="" tal:attributes="src var" /> と書く必要があります。

XML型の欠点としては、直接変数を代入できない場合があり煩わしことやテンプレート解析にXMLパースが必要となり重たいという面があります。

私は普段から使っていることもあり、XML型特にパワフルな機能を持つZPTは一番のお気に入りです。

また、PHPTALとしてPHPでも使われているらしい。

 

Chameleon

ZPTを高速して登場したのがChameleonです。微妙な仕様はZPTとことなりますが、概ね同じような文法で記述します。つまりXML型ということです。

最近人気の高いPython Webフレームワークである、Pyramid(http://www.pylonsproject.org/)でもよく使われています。

私がPyramidを使うときにはこのテンプレートを使っています。

 

Genshi

少し懐かしく聞こえるかもしれない、TurboGears(http://turbogears.org/)で標準的に使われていたテンプレート言語(当初TGではkidという同じようなテンプレート言語が使われていて)です。

XML型で、高機能ではありませんでしたが、高速化していたり、機能を限定して使いやすかったと思います。

@shimizukawa(http://twitter.com/shimizukawa)さんから情報をいただきましたので追記します。
Python製イシュートラッカーである、Trac(http://trac.edgewall.org/)のテンプレートで使われているようです。

jinja2

Flask(http://flask.pocoo.org/)で標準的に使われている。また、大人気ドキュメンテーションツールであるSphinxでも使われているテンプレート言語です。

Djangoのテンプレートの不足部分を拡張して作られています。文法はほぼDjangoテンプレートと同じ。

機能を絞り込んでいる点やテンプレートで出来る範囲を決めていることなど、好まれているようです。

 

mako

超高速と言われて出てきた、Pythonの機能まで使えるなんでもありなテンプレートエンジン。

Pyramid使いの方は多くこのテンプレートを使っています。

非XML型でなんでもありな感じなので、個人的には綺麗にならないのが好きではありません。

 

 

他にも

Django https://www.djangoproject.com/
Django内蔵テンプレートエンジン。先に書いたようにjinja2と同じ文法

Tenjin http://www.kuwata-lab.com/tenjin/
PyCon JPで毎回おもしろい発表をしてくれている日本人が作っている、超高速らしいテンプレートエンジン。
残念ながら私は使ったことがありません。

Kajiki http://kajiki.sourceforge.net/
genshiの後継になろうとしている物があるらしい。

 

簡単ですが、テンプレートエンジンの紹介をしました。

PythonでO/Rマッパーは、SQLAlchemy (http://www.sqlalchemy.org/)で決まりといった感がありますが(Djangoな人には怒られるかもしれないけど)、テンプレートエンジン界隈はまだまだたくさんでてきて混沌としそうですね。

 

最後に

Django のドキュメント翻訳やユーザ会を盛り上げていて、さらにこのアドベントカレンダーのマネージメントをしてくれている、Python界の若きエースの @hirokiky(https://twitter.com/hirokiky) にエールを送ると共に活動に感謝しています。

若い人たちの活躍を応援して行くためにも、来年もPyCon開催やその他の活動を行って行きたいと思います。

comments powered by Disqus