即使标签明显结束,Jinja2也会出现endif错误

时间:2016-11-13 21:02:15

标签: python flask jinja2

我正在尝试在循环期间附加到列表中..我收到的错误是关于我的{%if%}标记没有被关闭并遇到unknowntag'hidden'。我在这里缺少什么?

{% set hidden = [] %}
{% for row in packages %}
{% if row.hidden %}  #OPEN
{% hidden.append(row.id) %} #APPEND
{% endif %} # CLOSED
{% endfor %}
{% if hidden[0] %} # If my list isn't empty, show the next line
View Packages (Click here to show hidden)
{% else %}
View Packages # If list is empty show this line
{% endif %}

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

出于某种原因,我的hidden.append必须在另一个if语句中。

{% set hidden = [] %}
{% for row in packages %}
{% if row.hidden %}  #OPEN
{% if hidden.append(row.id) %}{% endif %} #APPEND #THIS LINE
{% endif %} # CLOSED
{% endfor %}
{% if hidden[0] %} # If my list isn't empty, show the next line
View Packages (Click here to show hidden)
{% else %}
View Packages # If list is empty show this line
{% endif %}

答案 1 :(得分:1)

Jinja2基于if标签或set标签之类的标签,但标签和python代码不一样。特别是你不能接受任何python代码,把它放在{% %}中并期望它能够工作。而是使用do tag

{% for row in packages %}
{% if row.hidden %}  #OPEN
{% do hidden.append(row.id) %}
{% endif %} # CLOSED
{% endfor %}

您的if版本有效,因为如果执行代码并查看returnvalue。但是您对返回值不感兴趣,因此请使用do标记。

do表达式是一个扩展名,因此您需要加载它以使其正常工作。