Comment faire pour incrémenter une variable dans une boucle for dans jinja modèle?
Je voudrais faire quelque chose comme:
variable p est de test.py ce qui est une liste ['a','b','c','d']
{% for i in p %}
{{variable++}}
{{variable}}
résultat de sortie est:
1 2 3 4
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
loop.index
:Vérifier la modèle de concepteur de documentation.
Dans les versions plus récentes, en raison de règles de portée, ce qui suit pas travail:
loop.index
fait le travailQue Jeroen a dit qu'il y a de délimitation de l'étendue des questions: si vous réglez "compter" en dehors de la boucle, vous ne pouvez pas le modifier à l'intérieur de la boucle.
Vous pouvez contourner ce problème en utilisant un objet plutôt qu'un scalaire pour "compter":
Vous pouvez maintenant manipuler le comte à l'intérieur d'un forloop ou même un %include%. Voici comment j'ai incrément count (oui, c'est encombrants mais bon):
{% set count = [] %}
, ajouter un élément à la liste dans chaque boucle{% set __ = index.append(1) %}
et l'utilisation de la durée d'affichage de l'indexindex|length
.{% do index.append(1) %}
Mais vous devez ajouter l'extension décrite ici{% set count = [ ] %}
, ajouter un élément à la liste dans chaque boucle{% set __ = count.append(1) %}
et l'utilisation de la longueur pour afficher le nombrecount|length
Après 2.10, pour résoudre le problème de la portée, vous pouvez faire quelque chose comme ceci:
Voici ma solution:
Mettre tous les compteurs dans un dictionnaire:
Définir une macro pour incrémenter facilement:
Maintenant, chaque fois que vous voulez incrémenter le 'counter1 contre, il suffit de faire:
Est venu la recherche de Django façon de faire cela et trouvé ce post. Peut-être que quelqu'un d'autre besoin de l'django solution qui viennent ici.
Lire la suite ici:
https://docs.djangoproject.com/en/1.11/ref/templates/builtins/
J'étais en lutte avec ce comportement trop. Je voulais changer div class dans jinja basé sur le comptoir. J'ai été surpris de voir que pythonic façon ne fonctionne pas. Code suivant a zéro mon compteur à chaque itération, donc je n'avais qu'classe rouge.
J'ai utilisé la boucle.index comme ça et ça fonctionne: