Jinja2 for循环条件

时间:2012-09-29 18:05:30

标签: python google-app-engine jinja2

我的数据结构类似于

data = {{'value': 1, 'state': False},
        {'value': 2, 'state': True}}

状态和价值将根据外部条件而变化。

我想在条件上使用Jinja2 for ... else循环,比如

{% for item in data where item.state == True %}
   {{ item.value }}
{% else %}
   no true items
{% endfor %}

我在多个地方使用数据结构,有时候都需要显示。我只想保留一个结构的副本,并让Jinja2模板负责显示state == True的项目或没有任何项目的消息,而不是必须预先处理它Python在将其提供给模板之前,或将结构拆分为多个部分。

这是在使用Python 2.7和Jinja2 2.6的Google App Engine上运行,数据结构由memcache支持。

2 个答案:

答案 0 :(得分:12)

这就是你要找的东西:

 {% for item in data if item.status %}
   {{ item.value }}
 {% else %}
   no true items
 {% endfor %}

答案 1 :(得分:0)

我建议您查看Accessing global attributes from inside a macro in Jinja2,如果您使用的是Flask,可以查看template context processors。为了它的价值,我所做的(在Flask中)是创建实例变量,它们是app实例的一部分;我不明白为什么你不能对Jinja2环境做同样的事情。换句话说,将您的字典添加到Jinja2的环境中,并验证需要什么(如果有的话)使其在模板中可用。