Jinja2带有条件的循环

17

我有一个类似于以下数据结构:

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中进行预处理或将结构拆分成多个部分。
这是运行在Google App Engine上的Python 2.7和Jinja2 2.6,数据结构由memcache支持。
2个回答

35
你可以使用if条件语句与for循环结合,以此来有条件地处理(或筛选)循环项,如下所示:
{% for item in data if item.state %}
    {{ item.value }}
{% else %}
    no true items
{% endfor %}

0
我建议您查看在Jinja2宏中访问全局属性,如果您正在使用Flask,则可以查看模板上下文处理器。就我而言,在Flask中,我创建了作为应用程序实例一部分的实例变量;我不明白为什么您不能在Jinja2环境中做同样的事情。换句话说,将您的字典添加到Jinja2的环境中,并验证在模板中需要什么(如果需要任何内容)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接