Skip to main content

Easy-to-use active URL highlighting for Django

Project description

Easy-to-use active URL highlighting for Django

https://img.shields.io/travis/hellysmile/django-activeurl.svg https://img.shields.io/codecov/c/github/hellysmile/django-activeurl.svg https://img.shields.io/pypi/v/django_activeurl.svg

Features

  • 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!

  • href=”#” never causes highlighting for compatibility with techniques such as bootstrap nav.

Usage

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 %}
    <ul>
        <li> <!-- this <li> will render as <li class="active"> -->
            <a href="/some_page/">
                some_page
            </a>
        </li>
        <li>
            <a href="/another_page/">
                another_page
            </a>
        </li>
    </ul>
{% endactiveurl %}

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

Installation

Python 2.7+, 3.4+ 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://github.com/hellysmile/django-activeurl#egg=django_activeurl
  2. In your settings.py add the following:

    INSTALLED_APPS = (
        ...
        'django_activeurl',
        ...
    )
    
    TEMPLATE_CONTEXT_PROCESSORS = (
        ...
        'django.core.context_processors.request',
        ...
    )
  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.

Options

ignore_params =”yes|no” (default: “no”)

ignore_params will ignore GET parameters of URLs, e.g. /accounts/login/ will match /accounts/login/?next=/accounts/signup/.

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.

Configuration

The default options can be set in settings.py as well:

ACTIVE_URL_KWARGS = {
    'css_class': 'active',
    'parent_tag': 'li',
    'menu': 'yes',
    'ignore_params': 'no'
}
ACTIVE_URL_CACHE = True
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.

Tests

pip install tox
tox

Jinja2

Vanilla Jinja2 configuration:

from jinja2 import Environment

from django_activeurl.ext.django_jinja import ActiveUrl


env = Environment(
    extensions=[ActiveUrl]
)

Options can be omitted:

{% activeurl css_class="active", menu="yes", parent_tag="li", ignore_params="no" %}
    <ul>
        <li>
            <a href="/page/">page</a>
        </li>
        <li>
            <a href="/other_page/">other_page</a>
        </li>
    </ul>
{% endactiveurl %}

If you’re using django-jinja you need to load the ActiveUrl in settings.py.

Django 1.8+ Jinja2 environment loader example can be found in tests.

Background

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 habrahabr.ru (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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-activeurl-0.1.12.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

django_activeurl-0.1.12-py2.py3-none-any.whl (18.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-activeurl-0.1.12.tar.gz.

File metadata

File hashes

Hashes for django-activeurl-0.1.12.tar.gz
Algorithm Hash digest
SHA256 ebb3f2746fdc76fee2095b75cad713e746378393c6c2b8e36455919a780acd50
MD5 7766bcca7e5409b1c8dbf49e9c78d923
BLAKE2b-256 e7a772ee97ceacc92cf2dbc4858dba9ba88d071d676115b73c94db15d0eed1eb

See more details on using hashes here.

File details

Details for the file django_activeurl-0.1.12-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_activeurl-0.1.12-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 ad5498bf589afaa117fe1c80d1a4fdbef29185cee47517254cd8f273b8a0140d
MD5 2f034b0456e1ea711fcc8456d49b18af
BLAKE2b-256 b8a90d3936e7d8a2cce34356a96d0f84d1723ae47e8e71688269705bb68fc254

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page