我想计算列表中具有特定值的项目数,并在循环项目之前和之后打印此计数。我尝试了以下方法:
{% 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?
答案 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 }}