2010-07-16 8 views
1

Je rencontre des problèmes lors de l'affichage de blocs imbriqués dans un modèle.Blocs dans des blocs

par ex.

{% for category in categories %} 

     //code to display category info 

     {% products = products.object.filter(category = category) %} 
     {% for product in products%} 
       //code to display product info 
     {% endfor %} 
    {% endfor %} 

Je reçois une erreur "Invalid tag: 'endfor'".

Des idées?

+1

« bloc » a une signification particulière dans le langage de template de Django, ce qui est pas. –

+0

@Ignacio Vazquez-Abrams a raison, ce que vous voulez dire est un 'tag': http://docs.djangoproject.com/fr/1.2/topics/templates/#tags –

+2

Est' {% products = products.object.filter (category = category)%} 'légal dans les templates Django? –

Répondre

0

Je pense que vous ne pouvez pas utiliser arguemnts pour les méthodes. Vous devez modifier vos catégories d'objet, de sorte que vous utilisez kann:

{% for product in category.products %} 
0
{% products = products.object.filter(category = category) %} 

est pas reconnu comme une étiquette valide dans le système de modèle de django. Par conséquent, django se plaint de la fin manquante, bien que le {% pour x dans y%) ne soit pas l'erreur.

Cela devrait fonctionner

{% for category in categories %} 
    {% for product in products.object.all %} 
     //code to display product info 
    {% endfor %} 
{% endfor %} 

Mais ce n'est pas, ce que vous voulez atteindre. Simplement, vous n'êtes pas en mesure de filtrer sur product.objects avec l'argument category.

Vous devez écrire votre propre étiquette qui prend des arguments sur le filtrage ou repense votre problème.

+0

J'ai filtré le filtrage dans une méthode dans les catégories: par exemple category.get_products maintenant ma boucle interne lit: {% products = category.get_products%} {% pour le produit dans les produits%} // code pour afficher l'information produit {% endfor%} Vous obtenez toujours la même erreur? – Philip

1

Vous ne pouvez pas affecter des variables dans le système de gabarit Django. Vos deux tentatives:

{% products = products.object.filter(category = category) %} 

et

{% products = category.get_products %} 

sont à la fois la syntaxe Django non valide.

Certains systèmes de templates Python sont similaires à PHP: ils vous permettent d'intégrer du code Python dans des fichiers HTML. Django ne fonctionne pas de cette façon. Django définit sa propre syntaxe simplifiée et cette syntaxe n'inclut pas d'affectation.

Vous pouvez le faire:

{% for category in categories %} 

    //code to display category info 
    {% for product in category.get_products %} 
      //code to display product info 
    {% endfor %} 
{% endfor %}