说我有两个模板:
main.j2
{% include "vars.j2" %}
main: {{ var1 }}
vars.j2
{% set var1 = 123 %}
vars: {{ var1 }}
运行时,仅输出此行:
vars: 123
即。 var1
中的main.j2
未定义,即使它已设置为所包含的vars.j2
模板中的值。
如何将包含模板中的变量传递回包含它的模板?我认为链接延伸,但想知道是否有更优雅的方法。
答案 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 %}