- Info
Easy to use active url highlighting for django
live demo is available on heroku
- Automatic highlighting currently active
<a>
tags with css - Automatic highlighting up-level
<a>
tags for your menus - Removes boring stuff from your life!
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
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',
...
)
for successful lxml building you need to install some system stuff eg:
sudo apt-get install libxml2 libxml2-dev libxslt-dev build-essential python-dev
sudo ldconfig
sudo yum groupinstall 'Development Tools'
sudo yum install libxslt-devel libxml2 libxml2-devel python-devel
sudo ldconfig
pre build lxml binary you can find here
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
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
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
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
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)
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