Python コードを埋め込む形式のシンプルなテンプレートエンジンです。Ruby の ERB のような感じです。まだ検討したいところも多々ありますが、もしお役に立ちそうに思われた方はご自由にお使いください。で、何か不具合があれば教えてください♪
特徴
- Ruby の ERB 風の記法
- Python のインデントブロックを意識せず、テンプレートを記述可(”end” キーワードの使用)
- フィルタ。値の埋込み時に、html クォートなどのフィルタを自動的・全般的に適用可
- キャッシュ。Renderer 利用時に利用可
- メモリ保持で揮発性の1次ファストキャッシュ(1トランザクション内でのテンプレートの繰り返し利用の為)
- 2次キャッシュ。コンパイル済みのテンプレートの永続化。現在、File ベースと、Gae Memcache ベースのストレージを準備。他の DB ストアなど、必要に応じてストレージを追加可
- ヘルパ。幾つかの便利なヘルパを提供
- extends と block。Django のような、テンプレートを継承・拡張するスタイルを利用可
- include。テンプレート中で、他のテンプレートを読み込み
なお、eepy は、yuin さんの embpy をベースとした派生ライブラリです。
また、キャッシュのストレージ仕様は、kuwata-lab.com の pyTenjin を参考にさせて頂いています。
embpy との主な相違点(2010.02.10時点)
- ブロックの終わりの明示は end キーワードでのみ可
- インラインでブロックを記述する時に、{: ~ :} の記述が不要(普通に書けます)
- 複数行のコードパートにブロックを書く時は、end キーワードは不要(普通に書けます)
- 三項演算子が利用可
- render の戻り値は、unicode
ドキュメント
モジュール、クラス、メソッドに記載の doc を参照してください。
例
テンプレート(template.html/utf8):
1 2 3 4 5 6 7 8 9 10 |
<%- fmt = u" %%0%dd" % len(str(max**2)) def format(n): return fmt % n -%> <%=r u"< %s >" % title %> <%- for y in range(1, max+1): -%> <%- for x in range(1, max+1): -%> <%= format(x * y) -%> <%- end %> <%- end -%> |
Python コード:
1 2 3 4 5 6 7 8 |
import eepy vars = { "title": u"The times table", "max": 9, } file = codecs.open("template.html", encoding="utf8") t = eepy.Template(file) print t.render(vars, filter=eepy.helper.escape_xml) |
出力結果:
1 2 3 4 5 6 7 8 9 10 |
< The times table > 01 02 03 04 05 06 07 08 09 02 04 06 08 10 12 14 16 18 03 06 09 12 15 18 21 24 27 04 08 12 16 20 24 28 32 36 05 10 15 20 25 30 35 40 45 06 12 18 24 30 36 42 48 54 07 14 21 28 35 42 49 56 63 08 16 24 32 40 48 56 64 72 09 18 27 36 45 54 63 72 81 |
ソースコード
次の URLにて公開しています。
https://github.com/yuka2py/eepy