Me preguntaba cómo obtener la URL actual dentro de una plantilla.¿Cómo obtener la URL actual dentro de una plantilla de Django?
decir que mi URL era
/user/profile/
¿Cómo puedo devolver esto a la plantilla?
Me preguntaba cómo obtener la URL actual dentro de una plantilla.¿Cómo obtener la URL actual dentro de una plantilla de Django?
decir que mi URL era
/user/profile/
¿Cómo puedo devolver esto a la plantilla?
Django 1.9 y superiores:
## template
{{ request.path }}
{{ request.get_full_path }}
antigua:
## 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 }}
Un poco lacónico, y no es correcto. Es 'render_to_response', y no' render_to_request'. ¡Y no puede definir 'TEMPLATE_CONTEXT_PROCESSORS' como lo hace en settings.py, sin mencionar los otros procesadores predeterminados que pueden usarse en las plantillas! – RedGlyph
A partir de 2016, ya no es necesario que agregue nada a views.py. Siempre que se cargue django.core.context_processors.request en TEMPLATE_CONTEXT_PROCESSORS, tiene acceso a {{request.path}} de la plantilla. – Routhinator
'request.path' no incluye parámetros de consulta como'? Foo = bar'. Use 'request.get_full_path' en su lugar. – Flimm
Puede buscar la dirección URL en la plantilla de la siguiente manera:
<p>URL of this page: {{ request.get_full_path }}</p>
o
{{ request.path }}
Si y No necesitas los parámetros adicionales.
Algunas precisiones y correcciones se deben llevar a hypete's y Igancio's respuestas, voy a resumir aquí toda la idea, para referencia futura.
Si necesita la variable request
en la plantilla, que debe añadir el 'django.core.context_processors.request' a la configuración TEMPLATE_CONTEXT_PROCESSORS
, no es por defecto (Django 1.4).
También debe no olvidar los demás procesadores de contexto utilizados por sus aplicaciones. Por lo tanto, para agregar la petición a los otros procesadores por defecto, se podría añadir esto en su configuración, para evitar la codificación dura de la lista de procesadores predeterminado (que puede llegar a 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, siempre send the request
contents in your response que, por ejemplo, como esto:
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)
)
Utilicé una vista de clase genérica ampliada, y no fue necesario agregar 'solicitud' al contexto. – Bobort
Definitivamente más limpio para evitar la codificación de la lista TCP, pero docs.djangoproject.com/en/dev/topics/settings/#default-settings dice: 'Tenga en cuenta que un archivo de configuración no debe importar de global_settings, porque eso es redundante' – Medorator
'return render (request, 'user/profile.html', {'title': 'User profile'})' is short –
ésta es una cuestión de edad, sino que se puede resumir con la misma facilidad, ya que si está usando Django-registro.
En su enlace de Iniciar sesión y Cerrar sesión (digamos en el encabezado de su página) agregue el siguiente parámetro al enlace que irá a iniciar 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>
que es simplemente que, nada más que hay que hacer, al terminar la sesión que serán inmediatamente redirige a la página que están en, para acceder en, van a llenar el formulario y será entonces redirigir a la página que estaban en. Incluso si intentan iniciar sesión incorrectamente, todavía funciona.
debe codificar la ruta si está en una url: '{{request.path | urlencode}}' – Quentin
En plantillas de Django
Simplemente obtener la URL actual de {{request.path}}
Para conseguir URL completa con los parámetros {{request.get_full_path}}
Nota: Debe añadir request
en Django TEMPLATE_CONTEXT_PROCESSORS
supongo que enviar a la plantilla completa la solicitud 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 }}
Las otras respuestas fueron incorrectas, al menos en mi caso. request.path
no proporciona la URL completa, solo la URL relativa, p. /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
.
Mire la fecha. Las respuestas fueron dadas hace 6 o 7 años. – dotty
Las respuestas anteriores son correctas y dan una respuesta excelente y breve.
También estaba buscando para obtener el 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 solicitan.
Estoy pegando la parte del fragmento de código HTML que puede ver a continuación para comprender el uso de request.path
. Se puede ver 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>
posible duplicado de [ruta de lectura en las plantillas] (http://stackoverflow.com/questions/2127937/reading-path-in-templates) –
Todas las respuestas a continuación me hicieron pensar que necesitaba hacer algo de gimnasia para tener acceso a 'solicitud' en una plantilla. En Django 1.10 acabo de acceder a '{{request.path}}' en la plantilla y funciona. Por defecto 'django.core.context_processors.request' ya está configurado en settings.py si usó' startproject' – User