Utiliser la valeur de forloop.counter comme index de liste dans un modèle Django
dans mon Django 1.1.1 application j'ai une fonction dans la vue qui renvoie à son modèle une gamme de nombres et d'une liste de listes d'éléments, par exemple:
...
data=[[item1 , item2, item3], [item4, item5, item6], [item7, item8, item9]]
return render_to_response('page.html', {'data':data, 'cycle':range(0,len(data)-1])
À l'intérieur du modèle, j'ai obtenu un externe pour la boucle, qui contient aussi un autre pour le cycle d'affichage en sortie les contient de l'intérieur de la listes des données de cette manière
...
{% for page in cycle %}
...
< table >
{% for item in data.forloop.counter0 %}
< tr >< td >{{item.a}} < /td > < td > {{item.b}} ... < /td > < /tr >
...
< /table >
{% endfor %}
{% if not forloop.last %}
< div class="page_break_div" >
{% endif %}
{% endfor %}
...
Mais Django moteur de template ne fonctionne pas avec les forloop.counter0
valeur de l'indice de la liste (au lieu qu'il ne si je mettre manuellement une valeur numérique, index). Est-il un moyen de laisser la liste de la boucle fonctionne avec l'externe forloop.counter0
valeur?
Merci d'avance pour l'aide 🙂
source d'informationauteur Alex
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser des variables pour les noms d'attribut, les clés de dictionnaire ou d'une liste indizes.
Aussi
range(0,len(data)-1]
n'est pas valide python. Il devrait êtrerange(len(data))
.Vous n'avez probablement pas besoin de
cycle
. Peut-être ce que vous voulez, c'est ceci:J'ai résolu ce problème plutôt un moyen inefficace. S'il vous plaît ne pas jeter sur votre ordinateur lors de la lecture de ce code. Étant donné deux listes de longueur identique, il va parcourir le premier et imprimer l'élément correspondant de la seconde.
Si vous devez utiliser ce, à n'utiliser que rarement d'accéder à des modèles où la longueur des deux listes seront petites. Idéalement, refactoriser votre modèle de données afin d'éviter ce problème.
Je voulais avoir une alternance de couleurs dans ma table à l'aide d'une feuille de style, en passant par une liste de basculement Vrai/Faux des valeurs. J'ai trouvé cela très frustrant. En fin de compte, j'ai créé une liste d'éléments dans le dictionnaire avec les mêmes touches que les champs dans la table, plus un autre avec le basculement de valeur vrai/faux.
et mon modèle
Utilisation forloop.dernière True si c'est la dernière fois par le biais de la boucle:
De Modèle intégré dans les balises et filtres