2013-04-23 96 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 %}