Jinja 2中列表的元素

Per*_*run 7 python jinja2

我在Jinja2中列出了包含dicts的列表.就像是

items = [{'name':'name1', 'points':5}, {'name':'name2', 'points':7}, 
 {'name':'name3', 'points':2}, {'name':'name4', 'points':11}]
Run Code Online (Sandbox Code Playgroud)

我需要的是获得所有点的总和并在以后的某个地方打印它.

目前我得到的是:

{% set points = 0 -%}
{% for single_item in items -%}
    {% set points = points + single_item["points"] -%}
    {{points}}
{% endfor %}
{{ points }}
Run Code Online (Sandbox Code Playgroud)

结果是:5 12 14 25 0

有什么方法可以让我得到循环外的有值25(循环的最后一个值)?

Bar*_*ett 21

Jinja2包含一个和过滤器,它将为您执行此操作:

{{ items | sum(attribute='points') }}
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档:http://jinja.pocoo.org/docs/dev/templates/#sum

  • 这应该是公认的答案。比接受的答案更干净,但仍然可以正常工作 (4认同)

Per*_*run 3

我已经设法让它工作,虽然解决方案并不优雅,但它正在工作:

{% set points = [0] -%}
{% for single_item in items -%}
    {% if points.append(points.pop()+ single_item["points"]) -%}{% endif %}
{% endfor %}
{{ points }}
Run Code Online (Sandbox Code Playgroud)

点将是一个只有一个元素具有总和的数组。

也可以使用包含的do扩展来完成,这将替换 {% if %} 行。

  • 这不是最好的答案 (2认同)