web-dev-qa-db-ja.com

jinja2はテンプレートからテンプレートファイルをロードします

別のテンプレートファイル内からjinja2テンプレートをロードする方法はありますか?何かのようなもの

{{ render_template('path/to/file.html') }}

再利用したいスニペットがいくつかあるので、この機能を持つことが重要です。

24
Romeo M.

マルチファイルビューの設計方法に応じて、extendsタグまたはincludeタグのいずれかを使用します。

8
Wooble

{% include "file" %}これを行います。詳細については、 jinja2 docs を参照してください。

36
Ulrich Dangel

{% macro -%}sでテンプレートファイルを作成し、{% import "file" as file %}を使用して他のテンプレートファイルのマクロを使用する必要があります。 ドキュメント を参照してください

次に例を示します。

<!- in common_macros.html ->
{% macro common_idiom1(var1, var2, ... varN) -%}
    <!- your idiom, where you can use var1 through varN ->
{%- endmacro %}
<!- in my_template.html ->
{% import "common_macros.html" as idioms %}
{{ idioms.common_idiom1(a, b, ... N) }}

具体的には、この回答により、OPはrender_templateの動作など、希望する動作と同様にマクロに引数を渡すことができます(前の回答で前述したようにファイルを含めるだけでは、render_templateと同じ動作は実現されません)。

これは一般に、すべてのイディオムに対して新しいテンプレートを作成するよりも、または特別な場合の解決策である継承を使用するよりも優れています(1つのテンプレートでスニペットを複数回使用する場合はどうなりますか)。

7
okovko