2010-11-15 5 views
0

comment incrémenter la valeur d'une variable dans un modèle .. ??django addition

{% for s in list%} 
    {% for subject in s%} 
      {% for sub in subject %} 

        <div id="{{ sub| getid:i }}"></div> 
        # here i want to increment the value of i 
      {% endfor %} 
     {% endfor %} 
{% endfor %} 
+3

http://mywiki.wooledge.org/XyProblem –

+0

Si vous savez comment incrémenter la valeur d'une variable dans un modèle, alors SVP faites le moi savoir .. !! –

Répondre

4

Si vous voulez augmenter i sur toutes les boucles imbriquées, vous pouvez passer une autre variable de contexte stateful, comme i=itertools.count(), et dans le modèle, vous utilisez

<div id="{{ sub| getid:i.next }}"></div> 

Les Django documentation on the template language design états la philosophie du langage de template est que

la système de gabarit est destiné à exprimer la présentation, pas la logique du programme.

Et cela signifie souvent que vous ne pouvez pas manipuler l'état directement avec des filtres. Pour obtenir des changements d'état, vous devrez créer vos propres variables avec état dont l'état peut être modifié via un appel de fonction.

+0

je ne comprenais pas comment cela va-t-il fonctionner –

+0

ohh..je l'ai eu merci beaucoup :) –

3

L'utilisation d'un modèle pour la boucle? Vous pouvez essayer en utilisant:

forloop.counter

voir les docs ici: http://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs

Mise en œuvre:

{% for s in list%} 
    {% for subject in s%} 
    {% for sub in subject %} 
       <div id="{{ sub| getid:forloop.counter+(forloop.parentloop.counter - 1)*total_iterations_inner_loop+(forloop.parentloop.parentloop.counter-1)*total_iterations_mid_loop*total_iterations_inner_loop }}"></div> 
     {% endfor %} 
    {% endfor %} 
{% endfor %} 
+0

Mais si la deuxième boucle recommence, j'obtiendrai les mêmes valeurs dans la troisième boucle. –

+0

hmm ... en examinant l'utilisation du compteur forloop imbriqué. – crodjer

+0

Dans l'argument getid, passez la somme des compteurs forloop comme dans la mise à jour de réponse. – crodjer

0
+0

cela ne ferait que retourner l'addition des valeurs, mais ne changerait pas la valeur de la variable .. !! –

+0

Cela ne changera que la sortie. Cela ne changera pas la valeur de la variable 'i'. –

+0

vous pouvez essayer ceci: http://stackoverflow.com/questions/2376511/how-to-access-outermost-forloop-counter-with-nested-for-loops-in-django-templates pour accéder au compteur de boucle parent et Utilisez la balise add pour mettre à jour la boucle la plus interne en fonction de celles extérieures. – crodjer