2012-03-19 7 views
6

たとえば、ユーザーのプロファイル情報など、あるページで一定の量のHTMLを何度もレンダリングする必要があるとしましょう。 Jinjaのマクロは、そのような使用に絶対に適しているようです。しかし、Djangoにはマクロはありません。DjangoのテンプレートシステムでJinjaのマクロに相当するものは何でしょうか?

今、私は同じ目的でカスタムフィルタを使用しています。これは最善の方法ですか、何か不足していますか?

ありがとうございました。


ps。私はwebapp2 &ジンジャーとGAEで実行されているアプリをDjangoに移行しています。

+0

ジンジャは、djangoのテンプレートシステムのいくつかの制限を回避するためにdjangoテンプレートを拡張しています。マクロのブロックタグは、ジンジャ固有のものです。これをエミュレートする唯一の方法は、(あなたが言ったように)カスタムタグとフィルタを使用することです。 –

答えて

7

ドキュメントをもう少し掘り下げたら、ついに"correct" way to do this: custom inclusion tagsが見つかったので、テンプレートからタグを作成できるようになりました。

+2

あなたが望むのであれば、代わりにジンジャを使うことができます。 – Marcin

+2

このリンクは無効です。新しいものがここにあります:https://docs.djangoproject.com/en/1.10/howto/custom-template-tags/#inclusion-tags – fluffels

2

あなたが取ることができる2つのアプローチは、blocksincludesです。ブロックを使用すると、継承ストランドを通ってそれをすべて含める必要があります。 includesでは、必要に応じてロードするだけですが、適切なコンテキスト変数をビューから渡していることを確認する必要があります。しかし、あなたの現在のアプローチはおそらくDRYの面で最も役に立ちます。

+0

ありがとうございます。私はちょうど確認したかった。 DjangoがJinjaからマクロを取得していないという特別な理由はありますか? – aviraldg

+0

@aviraldg Djangoのテンプレートシステムは設計上強力ではありません。 – Marcin

1

Djangoにはマクロがありません。カスタムフィルタでも、独自のテンプレートで繰り返しコードを区切っていても、 "with"で渡された異なる引数を何度も繰り返してもかまいません。しかし、あなたは実際にdjangoと完全に細かいjinja2テンプレートシステムを使用することができます。

0

ちょうど記録のために、実際にマクロをほしいと思っているならば、かなり頑丈な方法で、既存のスニペットをdjangoのマクロにするのにかなりの時間を費やしました。check it out

アドバイスとして、ほとんどの場合、マクロで何をしたいのですか?前述のように、includeタグを使用してください。しかし、時には本当にマクロが必要な場合があります。そのために、私のようなテンプレートタグライブラリ(これはdjangoでこれを行ういくつかの1つです)を使用する必要があります。

関連する問題