/django-activeurl

Easy to use active url highlighting for django

Primary LanguagePythonApache License 2.0Apache-2.0

django-activeurl

Info:Easy to use active url highlighting for django
https://api.travis-ci.org/hellysmile/django-activeurl.png

live demo is available on heroku

Features

  • Automatic highlighting currently active <a> tags with css
  • Automatic highlighting up-level <a> tags for your menus
  • Removes boring stuff from your life!

Usage

in your templates you need:

{% load activeurl %}

then:

{% activeurl %}
    <ul>
        <li>
            <a href="/some_page/">
                some_page
            </a>
        </li>
        <li>
            <a href="/another_page/">
                another_page
            </a>
        </li>
    </ul>
{% endactiveurl %}

will be rendered to:

<ul>
    <li class="active">
        <a href="/some_page/">
            some_page
        </a>
    </li>
    <li>
        <a href="/another_page/">
            another_page
        </a>
    </li>
</ul>

if your current request.get_full_path() starts with /some_page/

html tags inside {% activeurl %}{% endactiveurl %} must have valid root tag, like <ul> or <div>, etc - otherwise they will be wrapped in <div>

starts with logic decided for appling "active" status for up-level <a> in your menus/submenus

Installation

install the stable version using pip:

pip install django-activeurl

install the in-development version using pip:

pip install -e git+git://github.com/hellysmile/django-activeurl#egg=django_activeurl-dev

modify your settings.py:

add 'django-activeurl' to your INSTALLED_APPS

add 'django.core.context_processors.request' to your TEMPLATE_CONTEXT_PROCESSORS

like this:

INSTALLED_APPS = (
    ...
    'django-activeurl',
    ...
)

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.request',
    ...
)

Quick start

for successful lxml building you need to install some system stuff eg:

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

Windows

pre build lxml binary you can find here

Cloud

99.99% thats lxml will build out from the box

Keep in mind, if your distro/os provides executable python with python3 (like Archlinux) you may check installation and addition instructions

ready to use example

git clone https://github.com/hellysmile/django-activeurl.git
cd django-activeurl
virtualenv env
source env/bin/activate
cd example
pip install -r dev_requirements.txt
python manage.py syncdb
python manage.py migrate
python manage.py runserver

then open http://127.0.0.1:8000/pages/page1/ in your favorite web-browser

Configuration and performance

in addition to {% activeurl %} you can add keyword parameters css_class and parent_tag, which means css class that will be added to parent element of <a>, in this case it is <li>

example:

{% activeurl css_class="current" parent_tag="li" %}
    <ul>
        <li>
            <a href="/some_page/">
                some_page
            </a>
        </li>
    </ul>
{% endactiveurl %}

will be rendered into:

<ul>
    <li class="current">
        <a href="/some_page/">
            some_page
        </a>
    </li>
</ul>

by default these values are:

{% activeurl css_class="active" parent_tag="li" %}

there is no rebuilding HTML inside template tag when no "active" urls found

by default CACHE_ACTIVE_URL is True, so before building HTML tree, searching "active" urls, django-activeurl will try to get previously rendered HTML from your cache backend

You can disable caching in your settngs.py:

CACHE_ACTIVE_URL = False

in addition you can set CACHE_ACTIVE_URL_TIMEOUT which is timeout for cache key to expire

default value is:

CACHE_ACTIVE_URL_TIMEOUT = 60 * 60 * 24 # 1 day

and the last one configurable option is CACHE_ACTIVE_URL_PREFIX which is by defaults django_activeurl. - its cache key prefix, for skipping issues with similar keys in your backend

Tests

git clone https://github.com/hellysmile/django-activeurl.git
cd django-activeurl
virtualenv env
source env/bin/activate
pip install -r test_requirements.txt
python setup.py nosetests

Background

for building HTML element tree django-activeurl uses lxml, which is one of the best HTML parsing tools,more info and benchmarks can be found at habrahabr.ru (in russian)

Additional

I will make python 3 port after django 1.5 stable will be released, as soon as possible

Python 3.x, Django 1.5 status

initializr is used for html template

fork me button