Django - Comment faire tuple déballage dans un modèle "pour" boucle
Dans mon views.py je suis en train de construire une liste de deux n-uplets, où le second élément du tuple est une autre liste, comme ceci:
[ Product_Type_1, [ product_1, product_2 ],
Product_Type_2, [ product_3, product_4 ]]
Dans la plaine de vieux Python, j'ai pu itération de la liste comme ceci:
for product_type, products in list:
print product_type
for product in products:
print product
Je n'arrive pas à faire la même chose dans mon Django template:
{% for product_type, products in product_list %}
print product_type
{% for product in products %}
print product
{% endfor %}
{% endfor %}
J'obtiens cette erreur de Django:
Pris une exception tout de rendu: zip argument n ° 2 doit prendre en charge l'itération
Bien sûr, il y a certaines balises HTML dans le template, pas d'impression des déclarations. Est tuple déballage pas pris en charge dans le langage de template de Django? Ou suis-je les choses à ce sujet dans le mauvais sens? Tout ce que je suis en train de faire, c'est afficher une simple hiérarchie des objets - il existe plusieurs types de produits, chacune avec plusieurs produits (en models.py le Produit est une clé étrangère vers Product_type, un simple one-to-many relation).
Évidemment, je suis tout à fait nouveau pour Django, de sorte que toute entrée serait appréciée.
- Vous parlez de tuples, mais votre question ne contient que des listes. Ce sont des choses différentes en python.
- En fait vous n'avez pas de deux n-uplets. Regardez attentivement votre liste, vous avez 4 éléments de la liste. Comme Jonny Buchanan noté, vous devez faire ceci: [ [Product_Type_1, [ product_1, product_2 ], ], [Product_Type_2, [ product_3, product_4 ], ], ] afin d'obtenir une version de liste de deux n-uplets.
Vous devez vous connecter pour publier un commentaire.
il serait mieux si vous construisez vos données comme {note de l' '(' et ')' peuvent être échangés pour de l' '[' et ']' repectively, l'un étant pour les n-uplets, l'un pour les listes}
et le modèle ce faire:
la façon dont les tuples/les listes sont décompressés dans des boucles for est basé sur l'élément renvoyé par la liste d'itérateur.
chaque itération un seul article a été renvoyé. la première fois autour de la boucle, Product_Type_1, le deuxième de la liste de vos produits...
Une autre façon est comme suit.
Si on a une liste de tuples dire:
alors on peut décompresser cette liste dans le fichier de modèle de la manière suivante.
Dans mon cas, j'ai eu une liste de tuples qui contenait l'URL, le titre et le résumé d'un document.
.0
... pas du tout intuitif..
dire quoi que ce soit à partir d'une variable d'accès à l'abonnement, en passant par l'invocation de méthode, tous avec la même syntaxe... Toujours d'accord avec vous, tho 🙂Vous devez utilisé de cette façon:
N'oubliez pas les éléments variables dans le dictionnaire de données
Si vous avez un nombre fixe dans votre tuples, vous pouvez simplement utiliser l'indexation. J'avais besoin de mélanger un dictionnaire et les valeurs sont des n-uplets, j'ai donc fait ceci:
Dans la vue:
Dans le modèle:
Juste envoyer le modèle d'une liste de types de produits et de faire quelque chose comme:
Ça fait un petit moment donc je ne peux pas me rappeler exactement ce que la syntaxe est, laissez-moi savoir si cela fonctionne. De vérifier la la documentation.