Djangoテンプレートエンジンを使用すると、次のように、名前付き引数を使用してカスタムコンテキストを設定するときに別の部分テンプレートを含めることができます。
{% include "list.html" with articles=articles_list1 only %}
{% include "list.html" with articles=articles_list2 only %}
ご想像のとおり、articles_list1
およびarticles_list2
は2つの異なるリストですが、まったく同じlist.html
テンプレートは、articles
変数を使用します。
Jinja2を使用して同じことを達成しようとしていますが、with
キーワードがサポートされていないため、推奨される方法がわかりません。
2017年以降の読者の場合、2.9
には、デフォルトでwith
ステートメントが含まれます。拡張は必要ありません。
http://jinja.pocoo.org/docs/2.9/templates/#with-statement
Jinjaの古いバージョン(2.9以前)では、拡張機能を使用してこの機能を有効にする必要がありました。現在、デフォルトで有効になっています。
Jinja2には 拡張機能 があり、これにより with
キーワードが有効になります-Djangoと同じ構文が得られず、予想どおりに機能しない場合がありますしかし、あなたはこれを行うことができます:
{% with articles=articles_list1 %}
{% include "list.html" %}
{% endwith %}
{% with articles=articles_list2 %}
{% include "list.html" %}
{% endwith %}
ただし、list.html
は基本的にリストを作成する方法として機能しているので、代わりに macro
に変更することをお勧めします-これにより柔軟性が大幅に向上します。
{% macro build_list(articles) %}
<ul>
{% for art in articles %}
<li>{{art}}</li>
{% endfor %}
</ul>
{% endmacro %}
{# And you call it thusly #}
{{ build_list(articles_list1) }}
{{ build_list(articles_list2) }}
この方法で、複数の変数をJinja2に渡すことができますInclude文-(by変数をカンマで分割するWithステートメント):
{% with var_1=123, var_2="value 2", var_3=500 %}
{% include "your_template.html" %}
{% endwith %}