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
django-templates
punteado
fuente
fuente
request
una plantilla. En Django 1.10 solo accedo{{request.path}}
a la plantilla y funciona. Por defectodjango.core.context_processors.request
ya está configurado en settings.py si lo usóstartproject
Respuestas:
Django 1.9 y superior:
Antiguo:
fuente
render_to_response
y norender_to_request
. ¡Y no puede definirTEMPLATE_CONTEXT_PROCESSORS
como lo hace en settings.py, sin mencionar los otros procesadores predeterminados que bien pueden usarse en las plantillas!request.path
no incluye parámetros de consulta como?foo=bar
. Usar en surequest.get_full_path
lugar.Puede buscar la URL en su plantilla de esta manera:
o por
{{ request.path }}
Si no necesita los parámetros adicionales.Algunas precisiones y correcciones deben llevarse a las respuestas de Hypete e Igancio. 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 laTEMPLATE_CONTEXT_PROCESSORS
configuración, no es por defecto (Django 1.4).Tampoco debe 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 predeterminada (que bien puede cambiar en versiones posteriores):
Luego, siempre que envíe los
request
contenidos en su respuesta , por ejemplo, así:fuente
request
al contexto.Note that a settings file should not import from global_settings, because that’s redundant
return render(request, 'user/profile.html', {'title': 'User profile'})
es más corto{{request.get_full_path|urlenode}}
si está redirigiendoEl siguiente código me ayuda:
fuente
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
request
djangoTEMPLATE_CONTEXT_PROCESSORS
fuente
Supongo que la solicitud completa de envío a plantilla es un poco redundante. Lo hago asi
fuente
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, así que terminé codificando la parte constante de la URL en la Vista antes de concatenarlarequest.path
.fuente
Ambos
{{ request.path }} and {{ request.get_full_path }}
devuelven la URL actual pero no la URL absoluta, por ejemplo:Entonces tendrás que hacer algo como
Sin embargo, puede obtener la URL absoluta usando (gracias a la respuesta anterior)
NOTA: no es necesario incluir
request
en elsettings.py
, que ya está ahí.fuente
Esta es una pregunta antigua, pero se puede resumir tan fácilmente como esto si está utilizando django-Registration.
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 irá al inicio o cierre de sesión. Su enlace debería verse así.
Eso es simplemente, no se necesita hacer nada más, al cerrar sesión se los redirigirá 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 se encontraban. Incluso si intentan iniciar sesión incorrectamente, todavía funciona.
fuente
{{ request.path|urlencode }}
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
. Puede verlo en milive website
en http://pmtboyshostelraipur.pythonanywhere.com/fuente
active
clase a cadali
elemento, ¿por qué no simplemente hacer eso en línea dentro de unli
elemento: en<li class="{% if "/contact/" == request.path %}active {% endif %}text-center">....</li>
lugar de un bloque gigante if / else para el conjuntoli
? Eso ahorraría un montón de código redundante :)En Django 3, desea utilizar la etiqueta de plantilla de URL :
Para ver un ejemplo, vea la documentación
fuente