DjangoのフィルタをJinja2のフィルタで書き直す

| コメント(0) | トラックバック(0)

 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用だけど、適宜書き直せばわりと便利に使えると思う。

トラックバック(0)

トラックバックURL: http://a-h.panepon.com/mt5/mt-tb.cgi/211

コメントする

このブログ記事について

このページは、AUSGANG SOFTが2014年1月 6日 10:17に書いたブログ記事です。

ひとつ前のブログ記事は「iPhoneを通話・MMSのみで運用する方法」です。

次のブログ記事は「djangoで静的ファイルのブラウザキャッシュを切る」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ