更改包含的jinja2模板中的变量

时间:2016-09-30 22:20:48

标签: jinja2

说我有两个模板:

main.j2

{% include "vars.j2" %}

main: {{ var1 }}

vars.j2

{% set var1 = 123 %}

vars: {{ var1 }}

运行时,仅输出此行:

vars: 123

即。 var1中的main.j2未定义,即使它已设置为所包含的vars.j2模板中的值。

如何将包含模板中的变量传递回包含它的模板?我认为链接延伸,但想知道是否有更优雅的方法。

2 个答案:

答案 0 :(得分:1)

我最近需要做同样的事情,并找到了两种解决方案。

如果您具有Jinja 2.10或更高版本,则可以使用名称空间:

main_ns.j2

{% set ns = namespace() %}
{% include "vars_ns.j2" %}
main_ns: {{ ns.var1 }}

vars_ns.j2

{% set ns.var1 = 123 %}
vars_ns: {{ ns.var1 }}

在Jinja 2.2或更高版本中,可以使用变量的块作用域来实现。我将变量设置放在基本模板中,以便多个子级可以扩展它。

vars_block.j2

{% set var1 = 123 %}
vars_block: {{ var1 }}
{% block content scoped %}{% endblock %}

main_block.j2

{% extends "vars_block.j2" %}
{% block content %}
main_block: {{ var1 }}
{% endblock %}

答案 1 :(得分:0)

您可以尝试使用with

{% with var1=0 %}
    {% include "vars.j2" %}
    vars: {{ var1 }}
{% endwith %}