2016-08-06 42 views
1

Ich habe eine Vorlage, die in meinem HTML so aussieht. Es verwendet die Bootstrap-Klassen.Django - Ändern der aktiven Navigationsvorlage basierend auf der Webseite

<-- navbar-template.html> 
    <div class="collapse navbar-collapse" id="myNavbar"> 
    <ul class="nav navbar-nav"> 
     <li><a href="/home/">Home</a></li> 
     <li class='active'><a href="/members/">Members</a></li> 
     <li><a href="#">Research</a></li> 
     <li><a href="#">Publications</a></li> 
     <li><a href="#">Links</a></li> 
    </ul> 
    <ul class="nav navbar-nav navbar-right"> 
     <li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Login</a></li> 
    </ul> 
    </div> 

Ich mag die aktive Klasse, aber ich brauche die, welche Liste Objekt zu ändern, auf welcher Seite des navbar django basiert geladen.

Ich denke, Sie möchten, dass so etwas in der home.html tun, Datei

<-- HOME --> 
{% include "navbar_template.html" with page="home"} %} 

###Do something with {{page}} variable in order to set the home list tag to active. 

Muss ich eine verrückte Menge von schreiben, wenn else-Anweisungen, oder gibt es einen einfacheren Weg. Vielleicht etwas mit dem views.py in django

Antwort

2

Sie es wie folgt (Beispiel Lösung, die ich auf meiner Seite verwenden) tun können:

<ul class="sidebar-nav--primary"> 
    {% url 'main:home' as home %} 
    {% url 'main:work' as work %} 
    {% url 'main:personal' as personal %} 

    <li><a href="{{ home }}" {% if request.path == home %}class="active"{% endif %}>Home</a></li> 
    <li><a href="{{ work }}" {% if request.path == work %}class="active"{% endif %}>Work</a></li> 
    <li><a href="{{ personal }}" {% if request.path == personal %}class="active"{% endif %}>Personal</a></li> 

</ul> 
1

Eine sauberere Methode würde eine custom template tag erschaffen. So etwas wie is_active:

# Inside custom tag - is_active.py 
from django.template import Library 
from django.core.urlresolvers import reverse 
register = Library() 

@register.simple_tag 
def is_active(request, url): 
    # Main idea is to check if the url and the current path is a match 
    if request.path in reverse(url): 
     return "active" 
    return "" 

und verwenden Sie es in Ihren Vorlagen wie folgt aus:

# template.html 
{% load is_active %} 
<li><a href="{% url 'home' %}" class="{% is_active request 'home' %}">Home</a></li>