我的数据结构类似于
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支持。
答案 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的环境中,并验证需要什么(如果有的话)使其在模板中可用。