skip to navigation
skip to content

django-activeurl 0.1.5

Easy to use active url highlighting for django

Latest Version: 0.1.12

A demo is available on


  • automatic highlighting of currently active <a> tags via CSS class
  • automatic highlighting of parent <a> tags for menus
  • removes boring / hardcoded stuff from your life!


After loading the template library via

{% load activeurl %}

the following code snippet will be rendered like this if request.full_path() starts with /some_page/:

{% activeurl %}
        <li> <!-- this <li> will render as <li class="active"> -->
            <a href="/some_page/">
            <a href="/another_page/">
{% endactiveurl %}

Note: The content of {% activeurl %}…{% endactiveurl %} must have valid root tag (i.e. <ul> or <div>, etc) – otherwise an exception will be raised.


Python 2.6, 2.7, 3.2, 3.3 and PyPy 1.9 are supported.

  1. Install the stable version using pip:

    pip install django-activeurl

    or install the in-development version using pip:

    pip install -e git+git://
  2. In your add the following:

  3. The lxml library is required and thus additional libraries need to be installed to build it:

    • Ubuntu:

      sudo apt-get install libxml2 libxml2-dev libxslt-dev build-essential python-dev
      sudo ldconfig
    • Fedora:

      sudo yum groupinstall 'Development Tools'
      sudo yum install libxslt-devel libxml2 libxml2-devel python-devel
      sudo ldconfig
    • MacOS X:

      brew install libxml2 libxslt
      sudo update_dyld_shared_cache -force
    • Windows: A pre-built lxml binary can be found here

    • Clouds: There’s a 99.99% chance that lxml will build out of the box.


parent_tag =”div|li|self|…” (default: “li”)

parent_tag defines that a parent element – and not the <a> tag itself – should be declared active when there’s a match in URLs. When you need to change the CSS class of the <a> tag, just enter “self”.

css_class =”<string>” (default: “active”)

Defines what CSS class to add to an active element.


The default options can be set in as well:

    'css_class': 'active',
    'parent_tag': 'li',
    'menu': 'yes'
ACTIVE_URL_CACHE_TIMEOUT = 60 * 60 * 24  # 1 day
ACTIVE_URL_CACHE_PREFIX = 'django_activeurl'

By default django-activeurl will try to retrieve a previously rendered HTML node from Django’s caching backend before active URLs are looked for and a new HTML tree is built. You can disable the cache with ACTIVE_URL_CACHE = False.

In addition, ACTIVE_URL_CACHE_TIMEOUT can be used to define a timeout for keys to expire. The default value is one day.

The last configuration option is ACTIVE_URL_CACHE_PREFIX (which is django_activeurl by default) and defines which name to use in Django’s caching backend.


pip install tox


Vanilla Jinja2 configuration:

from jinja2 import Environment

from django_activeurl.ext.django_jinja import ActiveUrl
from django_activeurl.ext.utils import options

env = Environment(
env.globals['options'] = options
{% activeurl options(request, css_class="active", menu="yes", parent_tag="li") %}
            <a href="/page/">page</a>
            <a href="/other_page/">other_page</a>
{% endactiveurl %}

Except for request, options can be omitted.

If you’re using django-jinja, jingo or coffin you need to load the ActiveUrl extension and populate Environment() with options in


For building the HTML element tree django-activeurl uses lxml, which is one of the best HTML parsing tools around. More info and benchmarks can be found at (in russian). Note that there’s no content rebuilding inside the template tag when no active URLs are found, so there’s no impact on performance.


File Type Py Version Uploaded on Size
django-activeurl-0.1.5.tar.gz (md5) Source 2013-10-29 11KB