2013-04-23 97 views
0

我想遍历一组对象并找到一个特定属性的最大值,但是jinja2会忽略迭代器中在迭代器之外声明的变量内的任何操作。例如:Jinja2 for循环行为类似于

{% set maximum = 1 %} 
{% for datum in data %} 
    {% if datum.frequency > 1 %} 
     {% set maximum = datum.frequency %} 
    {% endif %} 
{% endfor %} 
{# maximum == 1 #} 

datum.frequency比1对于一些datumdata肯定更大。

EDIT(解决方案)

这是类似this post,但有一点更给它。下面的作品非常难看。

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

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

这里是如何可以在Python写一个很好的例子的链接: Custom jinja2 filter for iterator

一旦你有你的过滤器返回的,你需要通过访问它的价值“|”像这样:

{% set maximum = datum|filtername %}