jinja模板变量赋值作用域
给定以下的Jinja代码片段
{% set sep='' %}
{% for stamp in stamp_list -%}
{%- for heartbeat in heartbeat_list -%}
{%- if heartbeat.name == site.name and heartbeat.stamp == stamp.stamp -%}
{{- heartbeat.sc_time -}}
{{- sep -}}
{% set sep=',' %}
[PROOF for new value {{ sep }}]
{%- endif -%}
{%- endfor -%}
{%- endfor %}
看看这个sep变量(是separator的缩写),我想用逗号把sc_time分开,比如像3.13,2.5,1.33,...这样。
所以我引入了这个sep变量,并在内部的if语句中进行了修改。看这个Jinja的文档,我没有看到关于在for循环或if语句内部的作用域的说明,确实我可以使用并改变sep变量... 在这个例子中,
{% set sep=',' %}
这一行被执行了,接下来的这一行
[PROOF ...
实际上会显示出逗号,但是,下次
{{- sep -}}
又会渲染成一个空变量。我到底漏掉了什么,或者说我哪里没理解清楚呢……
1 个回答
2
问题在于变量的作用域。你在循环里的 sep
变量被认为是一个新的变量,而不是你在最开始定义的那个变量。
这里有同样的问题和一些回答,可以参考一下:Jinja 变量的作用域能否在内部块中扩展?