Jinja2 for循环行为类似于

时间:2013-04-23 14:40:30

标签: jinja2

我想迭代一组对象并找到一个特定属性的最大值,但是jinja2忽略迭代器中迭代器外部声明的变量中的任何操作。例如:

{% set maximum = 1 %}
{% for datum in data %}
    {% if datum.frequency > 1 %}
        {% set maximum = datum.frequency %}
    {% endif %}
{% endfor %}
{# maximum == 1 #}
对于datum.frequency中的某些datum

data肯定大于1。

编辑(解决方案)

这与<{3}}的类似,但还有更多内容。以下作品非常难看。

{% set maximum = [1] %}
{% for datum in data %}
    {% if datum.freq > maximum[-1] %}
        {% if maximum.append( datum.freq ) %}{% endif %}
    {% endif %}
{% endfor %}
{% set maximum = maximum[-1] %}

1 个答案:

答案 0 :(得分:1)

您是否考虑过编写自定义过滤器以返回集合中特定属性的最高值?我更愿意尽量减少我在Jinja2模板中使用的逻辑量,以保持关注点的分离。

这是一个关于如何用python编写一个非常好的例子的链接: Custom jinja2 filter for iterator

让过滤器返回值后,您需要使用&#39; |&#39;像这样:

{% set maximum = datum|filtername %}