Supposons que vous ayez le code suivant et que vous ajoutiez une variable appelée cnt dans l'instruction for.
count_test.j2
{%- set cnt = 1 -%}
{%- for i in range(3) -%}
{%- set cnt = cnt + 1 -%}
{{ cnt }}
{% endfor -%}
result : {{ cnt }}
En regardant le résultat, vous pouvez voir que le résultat ajouté à la variable n'est pas hérité en dehors de l'instruction for.
production
2
3
4
result : 1
Selon la version, il semble qu'il ne soit pas ajouté.
production
2
2
2
result : 1
Cela fonctionne bien si vous stockez le résultat ajouté dans une liste. Ajoutez la valeur ajoutée à la liste avec append et supprimez la valeur avant l'ajout avec pop.
count_test2.j2
{%- set cnt = [1] -%}
{%- for i in range(3) -%}
{%- set _ = cnt.append(cnt[0] + 1) -%}
{%- set _ = cnt.pop(0) -%}
{{ cnt[0] }}
{% endfor -%}
result : {{ cnt[0] }}
<21/12/2019: De na90ya> Il semble que les variables soient préservées lors de l'utilisation d'objets d'espace de noms introduits dans la version 2.10 de jinja2. (Matériel de référence [1])
count_test3.j2
{%- set ns = namespace(cnt=1) -%}
{%- for i in range(3) -%}
{%- set ns.cnt = ns.cnt + 1 -%}
{{ ns.cnt }}
{% endfor -%}
result : {{ ns.cnt }}
En regardant le résultat, les variables sont toujours ajoutées en dehors de l'instruction for.
production
2
3
4
result : 4
[[1]Template Designer Documentation] (https://jinja.palletsprojects.com/en/2.10.x/templates/#assignments)