domain - django resolver_match
¿Cómo obtener la URL actual dentro de una plantilla de Django? (7)
Me preguntaba cómo obtener la URL actual dentro de una plantilla.
Di mi URL era
/user/profile/
¿Cómo devuelvo esto a la plantilla?
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 }}
En la plantilla django
Simplemente obtenga la url actual de {{request.path}}
Para obtener la url completa con parámetros {{request.get_full_path}}
Nota : debe agregar la request
en django TEMPLATE_CONTEXT_PROCESSORS
Esta es una pregunta antigua, pero puede resumirse tan fácilmente como esta si está utilizando el registro django.
En su enlace Iniciar sesión y Cerrar sesión (digamos en el encabezado de su página) agregue el siguiente parámetro al enlace que será para iniciar sesión o cerrar sesión. Su enlace debe tener este aspecto.
<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 se necesita hacer nada más. Al cerrar la sesión, se los redireccionará inmediatamente a la página en la que se encuentran, para iniciar sesión, rellenarán el formulario y luego lo redirigirán a la página en la que estaban. Incluso si intentan incorrectamente iniciar sesión todavía funciona.
Las otras respuestas fueron 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, por lo que terminé codificando la parte constante de la URL en la Vista antes de concatenarla con request.path
.
Las respuestas anteriores son correctas y dan respuestas grandes y cortas.
También estaba buscando obtener la url de la página actual en la plantilla de Django ya que mi intención era activar la HOME page
, la MEMBERS page
, la CONTACT page
, la CONTACT page
ALL POSTS page
CONTACT page
cuando se solicitan.
Estoy pegando la parte del fragmento de código HTML que puede ver a continuación para comprender el uso de request.path
. Puedes verlo en mi live website
en 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>
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 llevarse a las hypete''s e Igancio''s toda la idea aquí, para referencia futura.
Si necesita la variable de request
en la plantilla, debe agregar la configuración ''django.core.context_processors.request'' a la configuración TEMPLATE_CONTEXT_PROCESSORS
, no está por defecto (Django 1.4).
Tampoco debe olvidar los otros procesadores de contexto que utilizan sus aplicaciones. Por lo tanto, para agregar la solicitud a los otros procesadores predeterminados, puede agregar esto a su configuración, para evitar la codificación rígida de la lista de procesadores predeterminados (que puede cambiar muy bien 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 contenido de la request
en 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)
)
Supongo que enviar a la solicitud de plantilla 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 }}