problème de template avec relation m2m
Bonjour,
nouveau, je découvre Django en réalisant un site de e-commerce.
Je me trouve coincé avec l'utilisation de boucle imbriquée et les templates.
Le but : Je crée des menus et les affichés dans deux pages différentes.
Sur la première sans Pb j'affiche menu par menu en ayant :
model
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Menu(models.Model) :
"""Enregistrement de tous les menus proposé"""
nom = models.CharField(max_length=255, unique=True)
slug = models.SlugField(max_length=255, unique=True, help_text='valeur unique pour chaque page créé, fabriqué à partir du nom')
prix = models.DecimalField(max_digits=9, decimal_places=2, default=0.00)
remarques = models.TextField(blank=True)
image = models.ImageField(upload_to="/images/menu", blank=True)
meta_keywords = models.CharField(max_length=255, help_text='utilisé une virgule entre chaque mot.')
meta_description = models.CharField(max_length=255, help_text='contenu pour le meta tag description.')
creer_le = models.DateTimeField(auto_now_add=True)
modifier_le = models.DateTimeField(auto_now=True)
actif = models.BooleanField(default=True)
compositions = models.ManyToManyField(Categorie) |
views
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| def show_menu(request, menu_slug, template_name="formules/menu.html") :
"""Fournis les éléments pour les pages de menu du module"""
m = get_object_or_404(Menu, slug=menu_slug)
categories = m.compositions.filter(actif=True)
page_title = m.nom
meta_keywords = m.meta_keywords
meta_description = m.meta_description
return render_to_response(template_name, locals(), context_instance=RequestContext(request))
template
{% extends "commande.html" %}
{% block content %}
<div class="menuImg">
<img src="{{ MEDIA_URL }}images/menu/{{ m.image }}" alt="{{ m.nom }}" />
</div>
<h1>{{ m.nom }}</h1>
<br/>
Composition :
{% for c in categories %}
<a href="{{ c.get_absolute_url }}">{{ c.nom }}</a>
{% if not forloop.last %} + {% endif %}
{% endfor %}
<br/>
Prix : {{ m.prix }}
<br/>
Remarques : {{ m.remarques }}
{% endblock %} |
par contre sur la deuxième je veux tous les menus avec les mêmes infos et là j'ai une erreur
views
Code:
1 2 3 4 5
| def menus(request, template_name="formules/menus.html") :
"""Fournis les éléments pour la page menus du module"""
menus = Menu.objects.filter(actif=True)
page_title = 'Faites votre choix'
return render_to_response(template_name, locals(), context_instance=RequestContext(request)) |
template
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
{% extends "commande.html" %}
{% block content %}
{% for m in menus %}
<div class="menu">
<h1>{{ m.nom }}</h1>
{% for cat in m.compositions %}
{{ cat.nom }}
{% if not forloop.last %} + {% endif %}
{% endfor %}
<br/>
Prix : {{ m.prix }}
<br/>
[Bouton Ajouté au panier]
<br/><br/>
</div>
{% endfor %}
{% endblock %} |
erreur
Code:
1 2
| TemplateSyntaxError
Exception Value : Caught TypeError while rendering: 'ManyRelatedManager' object is not iterable |