Jinja循环前后的打印计数

时间:2017-03-21 13:19:24

标签: python flask jinja2

我想计算列表中具有特定值的项目数,并在循环项目之前和之后打印此计数。我尝试了以下方法:

{% set counter = [] %}
Counter : {{ counter|length }}

{% for i in array %}
    {% if i['maybe_true'] %}
        {% if counter.append('1') %}{% endif %}
    {% endif %}
{% endfor %}

Counter : {{ counter|length }}

正如预期的那样,渲染它会产生前后不同的值。

Counter : 0
Counter : 100

是否有可能在循环之前获得100?

1 个答案:

答案 0 :(得分:4)

直接问题:不,在计算变量之前,你无法渲染变量。

使用selectattr过滤器。它返回一个生成器,因此在使用list之前使用length过滤器。

{{ array|selectattr('maybe_true')|list|length }}

如果您的实际代码比这更复杂,请考虑将逻辑移至Python,然后将处理后的数据发送到模板。

true_items = [i for i in array if i.maybe_true]
return render_template('index.html', array=array, true_items=true_items)
{{ true_items|length }}
{% for i in array %}
    ...
{% endfor %}
{{ true_items|length }}