Google AppEngineで、Python2.5から2.7にアプリをコンバートする時に、テンプレートエンジンがDjangoからJinja2に変更になった。
Migrating to Python 2.7
https://developers.google.com/appengine/docs/python/python25/migrate27?hl=ja
その時に、従来のdjango用テンプレートを、Jinja2用に書き直すのにわかりやすいドキュメントがなくて、いろいろ苦労したので、JangoフィルタのJinjaへの変換対照表をメモっておく。
誰かの役に立てば幸い。
テンプレートの継承
{{ block.super }}
↓
{{ super() }}
日付
{{ recipe.date|date:"Y/m/d" }}
↓
{{ recipe.date|datetimeformat('%Y-%m-%d') }}
def datetimeformat(value, format='%H:%M / %d-%m-%Y'):
return value.strftime(format)
繰り返し
{{forloop.counter}}
↓
{{loop.index}}
エスケープ
{% autoescape off %}
↓
{% autoescape false %}
{% endautoescape %}
or
{% value|safe %}
コメント
{% comment %}
{% endcomment %}
↓
{#
#}
ifchanged
{% ifchanged lib.city %}
{% endifchanged %}
↓
{% for lib in libraries %}
{% if before_libcity != lib.city %}
{% set before_libcity = lib.city %}
{% endfor %}
floatformat
{{city_okper_population|floatformat}}%
↓
{{city_okper_population|round(1, 'floor')}}%
cycle
{% cycle 'recipe_left' 'recipe_right' %}
↓
{{ loop.cycle('recipe_left', 'recipe_right') }}
Kindのキー
.key.id
↓
.key.id()
linebreaksbr
カスタムフィルターを作成
Django snippets: A few jinja2 filters like django ones
http://djangosnippets.org/snippets/1371/
from jinja2 import Markup, escape
↑をインポートしておく必要がある。
Jinja2はDjangoテンプレートに比べて、自由度が高く、軽くなっている印象がある。
Djangoも最近はだいぶ柔軟になっているようだけれど。
あと、Jinja2でフォームを書く際に便利なマクロがあったので、メモしておく。
Jinja2 WTForms macros for twitter bootstrap
https://gist.github.com/ligthyear/1284631
WTFormsというライブラリを使っていて、Bootstrap2用だけど、適宜書き直せばわりと便利に使えると思う。