Templates 如何将选定的命名参数传递给Jinja2';包括上下文吗?

Templates 如何将选定的命名参数传递给Jinja2';包括上下文吗?,templates,jinja2,Templates,Jinja2,使用Django模板引擎,我可以在使用命名参数设置自定义上下文时包含另一个部分模板,如下所示: {% include "list.html" with articles=articles_list1 only %} {% include "list.html" with articles=articles_list2 only %} 您可能会假设,articles\u list1和articles\u list2是两个不同的列表,但我可以重用相同的list.html模板,该模板将使用artic

使用Django模板引擎,我可以在使用命名参数设置自定义上下文时包含另一个部分模板,如下所示:

{% include "list.html" with articles=articles_list1 only %}
{% include "list.html" with articles=articles_list2 only %}
您可能会假设,
articles\u list1
articles\u list2
是两个不同的列表,但我可以重用相同的
list.html
模板,该模板将使用
articles
变量

我正在尝试使用Jinja2实现同样的功能,但我看不出推荐的方法是什么,因为不支持
with
关键字。

Jinja2具有启用关键字的功能-它不会提供与Django相同的语法,它可能无法按您预期的方式工作,但您可以这样做:

{% with articles=articles_list1 %}
    {% include "list.html" %}
{% endwith %}
{% with articles=articles_list2 %}
    {% include "list.html" %}
{% endwith %}
但是,如果
list.html
基本上只是作为创建列表的一种方式,那么您可能希望将其改为一个列表,这将给您带来更大的灵活性

{% 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) }}

通过这种方式,您可以将多个变量传递给Jinja2Include语句(通过在语句中用逗号分隔变量):


对于2017+的读者,自
2.9起的Jinja默认包含
with
语句。无需延长

在旧版本的Jinja(2.9之前)中,需要通过扩展来启用此功能。它现在默认启用


我发现自己在2017年,但它不起作用。在旧版本的Jinja(2.9之前)中,需要提供一个链接?@Pithikos”来启用此功能,并提供一个扩展。现在默认情况下,它已启用。“结尾处的链接指向答案本身!”!哇,太傻了。修好了,谢谢!
{% from "build_list_macro_def.html" import build_list %}
            {% with var_1=123, var_2="value 2", var_3=500 %}
                {% include "your_template.html" %}
            {% endwith %}