Navigation active state in Django

Here’s a clean way to display a navigation menu item’s active state in Django.

Wherever the app you’re doing this for is located you’ll have an Ensure you have the name set within each url group.

from django.conf.urls import patterns, url
from apps.pages import views

urlpatterns = patterns('',
    url(r'^pages/$', views.pages.index, name='pages.index'),
    url(r'^pages/about$', views.pages.about, name='pages.about'),

Next create a directory called templatetags within your app folder.
Add to it a blank and, giving it the below content.

from django.core.urlresolvers import resolve
from django.template import Library

register = Library()

def nav_active(request, url):
    In template: {% nav_active request "url_name_here" %}
    url_name = resolve(request.path).url_name
    if url_name == url:
        return "active"
    return ""

# nav_active() will check the web request url_name and compare it 
# to the named url group within, 
# setting the active class if they match.

Now to finish up, in your template .html file you need to load in the template tag and add it to each navigation item.

{% load nav_active %}

Leave a Reply

Your email address will not be published. Required fields are marked *