Jinja2 のドキュメントを読んだ後、将来の Django プロジェクトで採用することに興味があります。しかし、Django で Jinja2 テンプレートを使用するときに、誰かが何らかの欠点や落とし穴に遭遇したかどうか疑問に思っていますか? もしそうなら、どのようにそれらを回避しましたか?
Jinja2 の最高の部分と最悪の部分の断面図を取得するためだけに、肯定的な経験について聞いてもかまいません。
Jinja2 のドキュメントを読んだ後、将来の Django プロジェクトで採用することに興味があります。しかし、Django で Jinja2 テンプレートを使用するときに、誰かが何らかの欠点や落とし穴に遭遇したかどうか疑問に思っていますか? もしそうなら、どのようにそれらを回避しましたか?
Jinja2 の最高の部分と最悪の部分の断面図を取得するためだけに、肯定的な経験について聞いてもかまいません。
Django -> Jinja2の構文、構成、フィルター、および相互運用性の考慮事項のいくつかを私の wiki で文書化しました。
まだ実際の Django サイトで Jinja2 を使用したことはありませんが、スタンドアロン モードで Django テンプレートを使用するアプリケーションを Jinja2 テンプレートに変換しました。私が遭遇した唯一の (非常に小さな) 問題は、{% spaceless %} テンプレート タグの欠如でした。
Jinja2 の拡張は、Django テンプレート システムよりもはるかに困難です (テンプレート タグについて話しているのです)。包含タグ機能のほとんどは、Jinja のマクロを使用して実現できますが (マクロの方が適しているようです)、Jinja でもう少し複雑なタグを記述するのは非常に困難です (ドキュメントを参照してください)。
それ以外の唯一の障害は、Django ベースの習慣です... ;)
Django トランクにいくつかの新しいコードが追加され、さまざまなテンプレート言語で使用できる TemplateLoaders と Template クラスを記述できるようになりました。ドキュメントはhttp://docs.djangoproject.com/en/dev/ref/templates/api/#using-an-alternative-template-languageに追加されており、1.2 リリースになります。これにより、ログイン、ログアウト、管理などにカスタム テンプレートを使用するなどの問題がほとんどなくなります。
別の解決策は、Chouwa や Djinja2 など、Django の上にレイヤーを使用することです。テンプレートを使用するために Django の組み込みビューを取得する際に問題が発生しますが、Django トランクを使用したくない場合は機能します。
これらのいずれかを実行すると、唯一の大きな問題は、Django がテンプレート (特にコメント フレームワーク) に公開するもののほとんどが、Jinja2 に変換されないカスタム タグで公開されることです。残念なことに、下位互換性の問題により、これがすぐに変更されることはありません。
re: jinja2 の欠如については、 jinja2htmlcompressモジュール{% spaceless %}
を確認してください。
# In shell:
fetch -o myapp/jinja2htmlcompress.py https://raw.github.com/mitsuhiko/jinja2-htmlcompress/master/jinja2htmlcompress.py
# In your app:
app = Flask(__name__, static_path='/static')
app.config.from_object('myapp.default_settings')
app.jinja_env.add_extension('myapp.jinja2htmlcompress.HTMLCompress')
私にとって、Django で Jinja2 を使用することの最も厄介な点は、独自のテンプレートまたはテンプレート タグ (django-uni-forms など) が付属している場合、一部の Django アプリを使用できないことです。
これは、問題を解決する優れたアプリを見つけても、Jinja2 と互換性がないために使用できない場合に、イライラすることがあります。
ところで、Armin Ronacher (Jinja2 の作成者) は、Jinja2 と Django の両方の背後にある新しいテンプレート エンジン バックエンドに取り組んでいるようです。現在のインフラストラクチャを置き換えますが、下位互換性は維持します。https://www.djangoproject.com/weblog/2011/apr/25/gsoc/
2015 年 4 月の時点で、Django 1.8 は同じプロジェクト内の複数のエンジンを使用したレンダリング テンプレートをサポートし、Jinja2 の組み込みサポートを備えています。そのため、もはや全か無かの決定である必要はありません。
(これは質問に直接答えているわけではありませんが、以前はそうであったため、単なるコメント以上の価値があると思いました)。