【问题标题】:Jinja2 for loop behaving similarly to withJinja2 for 循环的行为类似于 with
【发布时间】:2013-04-23 14:40:30
【问题描述】:

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

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

对于data 中的某些datumdatum.frequency 肯定大于1。

编辑(解决方案)

这与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] %}

【问题讨论】:

    标签: jinja2


    【解决方案1】:

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

    下面是一个很好的例子的链接,说明如何用 python 编写代码: Custom jinja2 filter for iterator

    一旦您的过滤器返回您需要的值,您可以使用“|”访问它像这样:

    {% set maximum = datum|filtername %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多