Django Absolute provides context processors and template tags to use full absolute URLs in templates.
You can install Django Absolute with pip:
pip install django-absolute
or with easy_install:
easy_install django-absolute
Add absolute
to your settings.INSTALLED_APPS
.
Add absolute.context_processors.absolute
to your settings.TEMPLATE_CONTEXT_PROCESSORS
.
Django Absolute context processor depends on request context processor:
from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
'django.core.context_processors.request',
'absolute.context_processors.absolute',
)
Then you can access the following variables in your templates:
ABSOLUTE_ROOT
: full absolute root URL (without trailing slash) based on incoming requestABSOLUTE_ROOT_URL
: full absolute root URL (with trailing slash) based on incoming requestSITE_ROOT
: full absolute root URL (without trailing slash) based on current Django SiteSITE_ROOT_URL
: full absolute root URL (with trailing slash) based on current Django site
Django absolute provide 2 template tags:
absolute
: acts likeurl
but provide a full URL based on incoming request.site
: acts likeurl
but provide a full URL based on current Django Site.
To use theses template tags, you need to load the absolute
template tag library.
{% load absolute %}
{% url index %}
{% absolute index %}
{% site index %}
These template tags have exactly the same syntax as url
, including the "as" syntax:
{% absolute index as the_url %}
{{ the_url }}
If you use Django 1.5, you need to use the "new-style" url syntax (quoted parameters):
{% load absolute %}
{% url "index" %}
{% absolute "index" %}
{% site "index" %}
{% absolute "index" as the_url %}
{{ the_url }}
If you want to match the "new-style" syntax in Django < 1.5 you need to load absolute_future
instead (same behavior as {% load url from future %}
).
{% load url from future %}
{% load absolute_future %}
{% url "index" %}
{% absolute "index" %}
{% site "index" %}
{% absolute "index" as the_url %}
{{ the_url }}
For more informations, see the Django 1.5 release notes.