115 votes

Navigation dans django

Je viens de faire ma première petite webapp dans django et j'adore ça. Je suis sur le point de commencer sur la conversion d'une ancienne production de PHP site en django et dans le cadre de son modèle, il y a une barre de navigation.

En PHP, j'ai vérifier chaque valeur liquidative de l'option URL à contre-courant de l'URL, dans le code du modèle et d'appliquer une classe CSS si ils s'alignent. C'est très salissant.

Est-il quelque chose de mieux pour django ou une bonne façon de gérer le code dans le template?

Pour commencer, comment pourrais-je faire pour obtenir l'URL actuelle?

88voto

jpwatts Points 2671

J’ai utiliser l’héritage de modèle pour personnaliser la navigation. Par exemple :

base.html

about.html

35voto

nivhab Points 403

J’ai aimé la propreté de 110j ci-dessus alors j’ai pris la plupart et refactorisé pour résoudre les 3 problèmes que j’ai eu avec elle :

  1. l’expression régulière a été correspondant à l’url « maison » contre tous les autres
  2. J’ai eu besoin plusieurs URL mappée à un onglet de navigation, alors j’ai besoin d’une balise plus complexe qui prend un nombre variable de paramètres
  3. correction de quelques problèmes d’url

Le voilà :

21voto

Marcus Whybrow Points 8427

Je suis l'auteur de django la lignée de ce que j'ai écrit spécialement pour résoudre cette question :D

Je suis devenu ennuyé à l'aide de l' (parfaitement acceptable) jpwatts méthode dans mes propres projets et a puisé son inspiration dans 110j de réponse. La lignée ressemble à ceci:

{% load lineage %}
<div id="navigation">
    <a class="{% ancestor '/home/' %}" href="http://stackoverflow.com/home/">Home</a>
    <a class="{% ancestor '/services/' %}" href="http://stackoverflow.com/services/">Services</a>
    <a class="{% ancestor '/contact/' %}" href="http://stackoverflow.com/contact/">Contact</a>
</div>

ancestor est tout simplement remplacé par "actif" si l'argument correspondant au début de l'URL actuelle de la page.

La Variable d'arguments, et plein d' {% url %} type de résolution inverse est également prise en charge. J'ai saupoudré un peu d'options de configuration et à chair un peu et emballé pour tout le monde.

Si quelqu'un est intéressé, lire un peu plus sur le sujet:

>> github.com/marcuswhybrow/django-lineage

9voto

Michael Warkentin Points 956

Vous pouvez appliquer une classe ou id de l’élément body de la page, plutôt qu’à un point spécifique de nav.

HTML :

CSS :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X