Wenn Sie Ihr Projekt in eine base.html
Vorlage organisiert haben, die von anderen Vorlagen erweitert wird, zB appname/pagename.html
können Sie mit einem Vorlagen-zentrierten Ansatz das aktive Navigationselement hervorheben.
Dieser Ansatz gibt Ihnen einige Entkopplungsvorteile, die ich am Ende dieser Antwort im Detail notiert habe.
Ich habe diesen Ansatz als sehr nützlich für die Handhabung breiter Navigationselemente, die über die meisten oder alle einer Website gleich bleiben. Dies ist wahrscheinlich keine geeignete Lösung für detailliertere Navigationselemente, z. B. das Rendern einer dynamischen Liste von Elementen, die aus Ihrem Datenspeicher abgerufen wurden.
In Ihrer base.html
Vorlage, um einen Block zu jedem Navigationselement hinzufügen, so dass eindeutige Namen zu den Blöcken:
<ul class="nav">
<li class="{% block navbar_class-home %}{% endblock %}">
<a href="#">Home</a>
</li>
<li class="{% block navbar_class-about %}{% endblock %}">
<a href="#">About</a>
</li>
<li class="{% block navbar_class-pricing %}{% endblock %}">
<a href="#">Pricing</a>
</li>
</ul>
In Ihrer appname/pagename.html
Vorlage, wenn Sie eine der nav Elemente wollen aktiv erscheinen, überschreiben die geeigneter Block mit active
als Inhalt. Um zum Beispiel den „About“ Element zu markieren:
{% block navbar_class-about %} active {% endblock %}
Wenn Sie eine Ansicht verwenden, die diese Vorlage macht, wird es so machen:
<ul class="nav">
<li class="">
<a href="#">Home</a>
</li>
<li class=" active ">
<a href="#">About</a>
</li>
<li class="">
<a href="#">Pricing</a>
</li>
</ul>
Dies stellt eine anfängliche Rendering, die doesn‘ t verlassen sich auf JavaScript. (Sie können die Navigationsleiste Klassen anstelle mit JavaScript ändern, wenn Sie ein einseitiges Seite app tun sind.)
Für viele (aber nicht allen) Fällen, kann dies eine bessere Trennung Darstellung aus Sicht logisch:
können Sie ändern Ansichten Website-Navigationsdaten der Vorlage Kontext zu befestigen, aber so stark koppelt die Darstellung auf die view-Ebene zu tun, und macht es schwieriger, wieder verwendbare Anwendungen zu erstellen oder Drittanbieter-Anwendungen zu integrieren.
Der Blick ist bereits eine benannte Vorlage auswählen, was bedeutet, dass Sie bereits einige navigationsbezogene Informationen an die Schablonenschicht sind vorbei. Das könnte alles sein, was du brauchst.
Sie können einen Vorlagenkontextprozessor verwenden, um Informationen über die Ansicht zu erhalten, aber dies verschiebt die starke Kopplung nur auf eine andere Ebene des Systems, anstatt innerhalb der Vorlagenebene zu bleiben.
Ah, das ist mehr in der Art von dem, was ich suche. Entschuldigung für die Mehrdeutigkeit. Hatte gerade von der Bootstrap-Quelle als Referenz kopiert. Ich gebe das eine Chance! –