2016-11-13 55 views
0

我试图在循环中追加到列表..我得到一个有关我的{%if}标签没有被关闭并遇到unknowntag'隐藏' 。我在这里错过了什么?Jinja2得到endif错误,甚至tho标签明显结束

{% 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 %} 

有什么想法?

+0

显示完整的错误消息和有问题的完整模板。如果您在模板中使用'extends',则也会显示基本模板。 – furas

回答

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 %} 
+0

'{%%}'不支持执行任意代码。 – dirn

1

Jinja2的基于像一个标签,如果标签或一组标签,但标签和Python代码是不一样的。特别是你不能拿任何Python代码,把它放在{% %},并期望它的工作。而是使用do tag

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

你的版本if因为工作,如果执行的代码,并期待在返回值。但是您对返回值不感兴趣,因此请使用do标签。

do expression是一个扩展名,所以您需要加载它才能工作。

相关问题