j'ai pris l'approche « low tech » Jarret Hardie dans un même heu ... contexte (oui, c'est un jeu de mots ... qui ne sera pas un sens parfait pour vous à moins que je vous dis que je ne faisait pas de VL mais fixait la couleur de la bordure des boutons afin de montrer lequel avait été pressé).
Mais ma version est un peu plus compacte je pense. Au lieu de définir une seule barre active de variables de contexte dans la vue, je renvoie un dictionnaire, mais toujours avec une seule paire clé-valeur: par ex. activebar = {'foo': 'actif'}. Puis, dans le modèle, j'écris simplement class = "{{activebar.foo}}" dans l'ancre foo, et de manière correspondante dans les autres ancres. Si seul activebar.foo est défini pour avoir la valeur "active" alors activebar.bar dans l'ancre de la barre ne fera rien. Peut-être que "échouer silencieusement" est le bon discours de Django. Et Bob est ton oncle.
EDIT: Oups ... quelques jours ont passé, et alors que ce que j'avais écrit ci-dessus a fonctionné pour moi un problème est apparu lorsque j'ai mis dans la barre de navigation une ancre avec une nouvelle fenêtre comme cible. Cela semblait être la cause d'un étrange problème: après avoir cliqué sur la nouvelle fenêtre (onglet dans Firefox) puis retourné à celui à partir duquel la nouvelle fenêtre a été lancée, des portions de l'affichage sous la barre de navigation devenaient vides chaque fois que je déplaçais curseur sur les éléments sur la barre de navigation --- sans cliquer sur quoi que ce soit. J'ai dû forcer un rafraîchissement d'écran en déplaçant la barre de défilement (pas un rechargement de page, bien que cela ait fonctionné parce qu'il implique un redessin de l'écran).
Je suis beaucoup trop bavard pour comprendre pourquoi cela pourrait arriver. Et il est possible que j'ai fait quelque chose d'autre qui a causé le problème. Mais ... j'ai trouvé une approche plus simple qui fonctionne parfaitement pour moi. Mes circonstances sont que chaque modèle enfant lancé à partir d'une vue doit afficher un élément de barre de navigation associé comme étant "actif". En effet, cet élément de la barre de navigation est celui qui a lancé la vue qui a lancé le modèle enfant --- le deal habituel.
Ma solution --- prenons un élément de navigation "login" à titre d'exemple --- est de mettre cela dans le modèle enfant qui contient le formulaire de connexion. Je l'ai mis en dessous du bloc de titre, mais je ne suppose pas le placement à l'importance. Ensuite, dans le modèle de parent qui contient la définition de barre de navigation, pour la balise li qui entoure l'ancre pour la connexion point navbar je mets ... eh bien, voici le code:
<li class="{% block login %}{% endblock %}"><a href="/mysite/login">Login</a></li>
Ainsi, lorsque le modèle de l'enfant est rendu le parent affichera l'élément login navbar comme actif, et Bob est toujours votre oncle. L'approche de dictionnaire que j'ai décrite ci-dessus était de montrer laquelle d'une ligne de boutons avait été pressée, quand ils étaient tous sur le même modèle enfant. Cela fonctionne toujours pour moi et comme un seul modèle enfant est impliqué, je ne vois pas comment ma nouvelle méthode pour les navbars fonctionnerait dans cette circonstance. Notez qu'avec la nouvelle méthode pour les navbars, les vues ne sont même pas impliquées. Plus simple!
Avez-vous vérifié cela? http://stackoverflow.com/questions/1024168/django-is-there-a-better-way-to-bold-the-current-page-link – rinti
Cette solution CSS semble très difficile à maintenir et nécessite d'ajouter des informations dans 3 endroits différents. – Boris