【发布时间】:2011-06-19 17:06:12
【问题描述】:
我有以下 Jinja 模板:
{% set mybool = False %}
{% for thing in things %}
<div class='indent1'>
<ul>
{% if current_user %}
{% if current_user.username == thing['created_by']['username'] %}
{% set mybool = True %}
<li>mybool: {{ mybool }}</li> <!-- prints True -->
<li><a href='#'>Edit</a></li>
{% endif %}
{% endif %}
<li>Flag</li>
</ul>
</div>
<hr />
{% endfor %}
{% if not mybool %}
<!-- always prints this -->
<p>mybool is false!</p>
{% else %}
<p>mybool is true!</p>
{% endif %}
如果在for 循环中满足条件,我想将mybool 更改为true,这样我就可以在下面显示mybool is true!。但是,看起来内部 mybool 的范围仅限于 if 语句,因此 desired mybool 永远不会设置。
如何设置“全局”mybool 以便在最后一个 if 语句中使用它?
编辑
我找到了some suggestions(只有缓存的页面视图正确),但它们似乎不起作用。也许它们在 Jinja2 中已被弃用...
编辑
下面提供的解决方案。我仍然很好奇为什么上面的建议不起作用。有谁知道他们被弃用了?
【问题讨论】:
-
这不能回答您的问题,但您可以将
mybool设置为上下文变量并将其传递到模板中 -
这个想法很好,但不幸的是它不起作用。只要您在模板中使用“set”,该变量的范围就是本地的。
-
> 解决方案如下。我仍然很好奇为什么上面的建议不起作用。有谁知道他们被弃用了?它们被删除是因为在生成的代码中无法正确预测它们在 Python 堆栈上的冒泡程度。有一些黑客是可能的,但不值得付出努力。将逻辑排除在模板之外:)
标签: templates variables scope jinja2