¿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 era
/user/profile/
¿Cómo devuelvo esto a la plantilla?
7 answers
Django 1.9 y superior:
## template
{{ request.path }}
{{ request.get_full_path }}
Antiguo:
## 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 }}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-06 11:17:24
Puede obtener 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.
Algunas precisiones y correcciones deben ser llevadas a hypete's y Igancio respuestas, voy a resumir la idea completa aquí, para referencia futura.
Si necesita la variable request
en la plantilla, debe agregar el 'django.núcleo.context_processors.solicitud' al TEMPLATE_CONTEXT_PROCESSORS
configuración, no es por por defecto (Django 1.4).
También debe no olvidar los otros procesadores de contexto utilizados por sus aplicaciones. Por lo tanto, 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',
)
Entonces, a condición de que envíe el request
contenido en su respuesta, por ejemplo:
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)
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:41
En la plantilla de django
Simplemente obtenga la url actual de {{request.path}}
Para obtener url completa con parámetros {{request.get_full_path}}
Nota:
Debe agregar request
en django TEMPLATE_CONTEXT_PROCESSORS
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-15 07:25:47
Supongo que enviar a la plantilla solicitud completa es un poco redundante. Lo hago de esta manera
def home(request):
app_url = request.path
return render(request, 'home.html', {'app_url': app_url})
##template
{{ app_url }}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-18 07:36:57
Las otras respuestas eran incorrectas, al menos en mi caso. request.path
no proporciona la url completa, solo la url relativa, por ejemplo /paper/53
. No encontré ninguna solución adecuada, así que terminé codificando la parte constante de la url en la vista antes de concatenarla con request.path
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-13 01:33:09
Esta es una pregunta antigua, pero se puede resumir tan fácilmente como esta si está utilizando django-registration.
En su enlace de Inicio de sesión y Cierre de sesión (digamos en el encabezado de su página) agregue el siguiente parámetro al enlace que irá a iniciar sesión o cerrar sesión. Tu enlace debería verse así.
<li><a href="http://www.noobmovies.com/accounts/login/?next={{ request.path | urlencode }}">Log In</a></li>
<li><a href="http://www.noobmovies.com/accounts/logout/?next={{ request.path | urlencode }}">Log Out</a></li>
Eso es simplemente, no hay nada más que hacer, al cerrar la sesión serán redirigidos inmediatamente a la página en la que se encuentran, para iniciar sesión, completarán el formulario y luego se redirigirá a la página en la que estaban. Incluso si intentan iniciar sesión incorrectamente, todavía funciona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-31 13:45:10
Las respuestas anteriores son correctas y dan una respuesta grande y corta.
También estaba buscando obtener la url de la página actual en la plantilla de Django, ya que mi intención era activar HOME page
, MEMBERS page
, CONTACT page
, ALL POSTS page
cuando se les solicite.
Estoy pegando la parte del fragmento de código HTML que puedes ver a continuación para entender el uso de request.path
. Puedes verlo en mi live website
en http://pmtboyshostelraipur.pythonanywhere.com /
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<!--HOME-->
{% if "/" == request.path %}
<li class="active text-center">
<a href="/" data-toggle="tooltip" title="Home" data-placement="bottom">
<i class="fa fa-home" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true">
</i>
</a>
</li>
{% else %}
<li class="text-center">
<a href="/" data-toggle="tooltip" title="Home" data-placement="bottom">
<i class="fa fa-home" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true">
</i>
</a>
</li>
{% endif %}
<!--MEMBERS-->
{% if "/members/" == request.path %}
<li class="active text-center">
<a href="/members/" data-toggle="tooltip" title="Members" data-placement="bottom">
<i class="fa fa-users" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% else %}
<li class="text-center">
<a href="/members/" data-toggle="tooltip" title="Members" data-placement="bottom">
<i class="fa fa-users" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% endif %}
<!--CONTACT-->
{% if "/contact/" == request.path %}
<li class="active text-center">
<a class="nav-link" href="/contact/" data-toggle="tooltip" title="Contact" data-placement="bottom">
<i class="fa fa-volume-control-phone" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% else %}
<li class="text-center">
<a class="nav-link" href="/contact/" data-toggle="tooltip" title="Contact" data-placement="bottom">
<i class="fa fa-volume-control-phone" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% endif %}
<!--ALL POSTS-->
{% if "/posts/" == request.path %}
<li class="text-center">
<a class="nav-link" href="/posts/" data-toggle="tooltip" title="All posts" data-placement="bottom">
<i class="fa fa-folder-open" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% else %}
<li class="text-center">
<a class="nav-link" href="/posts/" data-toggle="tooltip" title="All posts" data-placement="bottom">
<i class="fa fa-folder-open" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% endif %}
</ul>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-31 01:04:09