Somme des éléments de la liste à Jinja 2
J'ai la liste de Jinja2 qui contiennent des dicts en lui-même. Quelque chose comme
items = [{'name':'name1', 'points':5}, {'name':'name2', 'points':7},
{'name':'name3', 'points':2}, {'name':'name4', 'points':11}]
Ce dont j'ai besoin est d'obtenir la somme de tous les points imprimer et quelque part plus tard.
Actuellement ce que j'ai est:
{% set points = 0 -%}
{% for single_item in items -%}
{% set points = points + single_item["points"] -%}
{{points}}
{% endfor %}
{{ points }}
Résultat est de: 5 12 14 25 0
Est-il possible que je peux obtenir ce que points à l'extérieur de la boucle a de la valeur 25 (dernière valeur de la boucle)?
- Ce genre de logique appartient au contrôleur, pas le modèle. Prétraiter vos données en conséquence, et de passer
items
comme dire quetotal
pour le modèle. - Peut-être que vous devriez poster ça comme réponse ?
- Je suis d'accord avec vous tout à fait, mais dans mon cas, il serait grand désordre.
Vous devez vous connecter pour publier un commentaire.
Jinja2 comprend une somme de filtre qui va le faire pour vous:
Voir la documentation ici: http://jinja.pocoo.org/docs/dev/templates/#sum
J'ai réussi à le faire fonctionner, même si la solution n'est pas très élégant, mais il est de travail:
points sera tableau avec juste un élément qui a somme.
Il peut également être fait avec de l' ne extension, et qui permettrait de remplacer {% if %} ligne.
Qui sorte de la logique devrait l'habitude d'aller dans le contrôleur, pas le modèle (la séparation de la logique de présentation). Prétraiter vos données en conséquence, et passer des articles ainsi que le total pour le modèle:
index.html
:Pour plus de détails sur l'expression
sum([i['points'] for i in items])
voir interprétations de la liste.