Jinja 2 中列表的总和元素

新手上路,请多包涵

我在 Jinja2 中有一个列表,它本身包含字典。就像是

items = [{'name':'name1', 'points':5}, {'name':'name2', 'points':7},
 {'name':'name3', 'points':2}, {'name':'name4', 'points':11}]

我需要的是获得所有 的总和并稍后在某个地方打印。

目前我得到的是:

 {% set points = 0 -%}
{% for single_item in items -%}
    {% set points = points + single_item["points"] -%}
    {{points}}
{% endfor %}
{{ points }}

结果是:5 12 14 25 0

有什么办法可以让循环外的 的值为 25 (循环中的最后一个值)?

原文由 Perun 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 551
2 个回答

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

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

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

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

原文由 Perun 发布,翻译遵循 CC BY-SA 3.0 许可协议

Jinja2 包含一个 sum 过滤器,它会为你做这件事:

 {{ items | sum(attribute='points') }}

请参阅此处的文档: https ://jinja.palletsprojects.com/templates/#jinja-filters.sum

原文由 Bartlett 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题