¿Cómo obtener la URL actual dentro de una plantilla de Django?
Me preguntaba cómo obtener la URL actual dentro de una plantilla.
Digamos que mi URL actual es:
.../user/profile/
¿Cómo devuelvo esto a la plantilla?
Django 1.9 y superior:
## template
{{ request.path }} # -without GET parameters
{{ request.get_full_path }} # - with GET parameters
Viejo:
## settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
)
## views.py
from django.template import *
def home(request):
return render_to_response('home.html', {}, context_instance=RequestContext(request))
## template
{{ request.path }}
Puede recuperar la URL en su plantilla de esta manera:
<p>URL of this page: {{ request.get_full_path }}</p>
o por
{{ request.path }}
si no necesita los parámetros adicionales.
Se deben aportar algunas precisiones y correcciones a las respuestas de Hypete e Ignacio , solo resumiré toda la idea aquí, para referencia futura.
Si necesita la request
variable en la plantilla, debe agregar 'django.core.context_processors.request' a la TEMPLATE_CONTEXT_PROCESSORS
configuración, no es la opción predeterminada (Django 1.4).
Tampoco debe olvidar los otros procesadores de contexto utilizados por sus aplicaciones. Entonces, para agregar la solicitud a los otros procesadores predeterminados, puede agregar esto en su configuración, para evitar codificar la lista de procesadores predeterminados (que muy bien puede cambiar en versiones posteriores):
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
'django.core.context_processors.request',
)
Luego, siempre que envíe el request
contenido de su respuesta , por ejemplo como este:
from django.shortcuts import render_to_response
from django.template import RequestContext
def index(request):
return render_to_response(
'user/profile.html',
{ 'title': 'User profile' },
context_instance=RequestContext(request)
)
El siguiente código me ayuda:
{{ request.build_absolute_uri }}
Ambos {{ request.path }} and {{ request.get_full_path }}
devuelven la URL actual pero no la URL absoluta, por ejemplo:
your_website.com/wallpapers/new_wallpaper
Ambos regresarán
/new_wallpaper/
(observe las barras diagonales iniciales y finales)
Entonces tendrás que hacer algo como
{% if request.path == '/new_wallpaper/' %}
<button>show this button only if url is new_wallpaper</button>
{% endif %}
Sin embargo, puedes obtener la URL absoluta usando (gracias a la respuesta anterior)
{{ request.build_absolute_uri }}
NOTA: no es necesario incluirlo requests
, settings.py
ya está allí.
En la plantilla de Django
Simplemente obtenga la URL actual {{request.path}}
para obtener la URL completa con parámetros{{request.get_full_path}}
Nota : debes agregar request
djangoTEMPLATE_CONTEXT_PROCESSORS