Templates 如何将选定的命名参数传递给Jinja2';包括上下文吗?
使用Django模板引擎,我可以在使用命名参数设置自定义上下文时包含另一个部分模板,如下所示: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
{% 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 %}