下面是一个基本循环,当位于赋值块之外时,它可以很好地编译:
{% for item in items %}
<p>{{item}}</p>
{% endfor %}
但是当我把循环放在assignment block的内部时,就像这样
{% set stuff %}
{% for item in items %}
<p>{{item}}</p>
{% endfor %}
{% endset %}
我得到AssertionError: Tried to resolve a name to a reference that was unknown to the frame ('item')
这个问题的动机是我使用宏来避免代码重复。例如,我有许多不同字段的div。其中一个div包含给用户的消息。在一种(但只有一种)情况下,我希望在这个div中包含一个<ul>
,因此我希望在将结果html作为参数传递给宏之前,在列表中遍历元素,将每个元素包装在<li>
标记中。这就是我的问题
是否可以在赋值块内部使用for循环?还是有更好的方法实现同样的目标
基于AssertionError: Tried to resolve a name to a reference that was unknown to the frame,这个问题只存在于
Jinja2
版本3.x
中。旧版本2.x
工作正常此时,在块中使用变量之前,需要设置变量。也许以后他们会修好的
但是
set
对我来说有一个很大的缺点:它不能获取参数,而且它只对items
有效。如果我设置
{% set items = other_items %}
,它就不能工作我宁愿把代码放在
macro
中使用stuff(main_items)
、stuff(other_items)
等等最低工作代码:
相关问题 更多 >
编程相关推荐