使用Django模板引擎我可以在使用命名参数设置自定义上下文时包含另一个部分模板,如下所示:
{% include "list.html" with articles=articles_list1 only %}
{% include "list.html" with articles=articles_list2 only %}
正如您可能想的那样,articles_list1
和articles_list2
是两个不同的列表,但我可以重复使用list.html
变量的articles
模板。
我正在尝试使用Jinja2实现相同的功能,但由于不支持with
关键字,我无法看到推荐的方式。
答案 0 :(得分:107)
Jinja2有an extension启用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) }}
答案 1 :(得分:33)
通过这种方式,您可以将多个变量传递给Jinja2 包含语句 - (在使用语句中用逗号分隔变量):
{% with var_1=123, var_2="value 2", var_3=500 %}
{% include "your_template.html" %}
{% endwith %}
答案 2 :(得分:19)
对于2017年以上的读者,2.9
的Jinja默认包含with
语句。无需延期。
http://jinja.pocoo.org/docs/2.9/templates/#with-statement
在较旧版本的Jinja(2.9之前)中,需要使用扩展程序启用此功能。它现在默认启用。