Sum elements of the list in Jinja 2

你。 提交于 2019-12-22 05:03:03

问题


I have list in Jinja2 that contain dicts in itself. Something like

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

What I need is to get sum of all points and to print it somewhere later.

Currently what I got is:

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

Result is: 5 12 14 25 0

Is there any way that I can get that points outside of loop has value 25 (last value from the loop)?


回答1:


Jinja2 includes a sum filter which will do this for you:

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

See documentation here: http://jinja.pocoo.org/docs/dev/templates/#sum




回答2:


I've managed to make it work, although solution is not elegant, but it is working:

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

points will be array with just one element that has sum.

It can be also done with included do extension, and that would replace {% if %} line.




回答3:


That sort of logic should usually go in the controller, not the template (separating logic from presentation). Preprocess your data accordingly, and pass items as well as total to the template:

from jinja2 import Template

template = Template(open('index.html').read())

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

total = sum([i['points'] for i in items])

print template.render(items=items, total=total)

index.html:

<table>

{% for item in items %}
  <tr>
    <td>{{ item.name }}</td>
    <td>{{ item.points }}</td>
  </tr>
{% endfor %}

</table>

<strong>Total:</strong>{{ total }}

For details on the expression sum([i['points'] for i in items]) see list comprehensions.



来源:https://stackoverflow.com/questions/25525101/sum-elements-of-the-list-in-jinja-2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!