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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
TemplateSyntaxError
Exception Value :     Caught TypeError while rendering: 'ManyRelatedManager' object is not iterable