J'aimerais réaliser une application permettant de réaliser des menus que l'utilisateur peut configurer via le panel d'administration.
Pour cela j'ai créer l'application "menus".
Le models.py contient :
#-*- coding: utf-8 -*-
from django.db import models
class Lien(models.Model):
"""Un lien"""
nom = models.CharField(max_length=10) # réduit pour passer dans les cases
description = models.CharField(max_length=100)
lien = models.URLField() # par défaut vérifie si le lien existe!
def __unicode__(self):
return self.nom
class Menu(models.Model):
"""Un menu"""
nom = models.CharField(max_length=10)
items = models.ManyToManyField(Lien)
def __unicode__(self):
return self.nom
Comme cette application doit-etre présente sur toutes les pages, je lui fait appel via la méthode RequestContext().$
La fonction qui est appelé alors est :externe.menus.context_processors.create_menu :
from externe.menus.models import Menu,Lien
def create_menu(request):
""" Crée les différents menus !"""
liens_un_menu=[]
menu_complet={} # un menucomplet : titre+liens
menus_complet=[] #les menus classés
for menu in Menu.objects.all():
liens_un_menu = menu.items.all()
menu_complet= {'nom': menu, 'items': liens_un_menu}
menus_complet += menu_complet
return {'MENUS': menus_complet}
Le template utilisé (base.html) est le suivant :
<div id="leftcolumn">
{% if MENUS %}
<div id="menus">
{% for menu in MENUS %}
<p>{{ menu }} , {{ menu.nom }} , {{menu.items}} </p>
<div class="menu">
<h3>{{ menu.nom }}</h3>
<ul>
{% for item in menu.items %}
<li><a href="{{ item.lien }}">{{item.nom}}</a></li>
{% endfor%}
</ul>
</div>
{% endfor %}
</div>
{% endif %}
</div>
<invalid> étant chez moi la valeur de TEMPLATE_STRING_IF_INVALID
Je pense que je n'utilise pas les bonnes méthodes pour obtenir les entrées de la base de données, mais je n'ai pas trouvé comment faire.
Je m'en remets donc à vous ! Merci d'avance :-)
EDIT : ah, et je n'ai trouvé personne faisant cela, est-ce bien la bonne méthode ?
EDIT2 : résolu ... il fallait faire :
menus_complet.append(dict(menu_complet))
au lieu de :
menus_complet += menu_complet
...
[Python/Django] menu dynamique
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.