variable - django url tag with parameters
Django: obtenga la URL de la página actual, incluidos los parámetros, en una plantilla (6)
¿Hay alguna forma de obtener la URL de la página actual y todos sus parámetros en una plantilla de Django?
Por ejemplo, un templatetag que imprimiría una URL completa como /foo/bar?param=1&baz=2
Además de la respuesta de sdolan:
si está utilizando I18N y desea pasar el next
valor a /i18n/setlang/
para cambiar el idioma de la página actual, necesitará quitar el código de idioma actual de la ruta completa. Algo como:
full_path = request.get_full_path()
current_path = full_path[full_path.index(''/'', 1):]
Esto supone que cada ruta tiene formato /LANG_CODE/any/other/stuff/with/?param=''yay''
y simplemente inicia LANG_CODE
sea lo que sea (p. Ej., /en/
dará como resultado /
).
Django tiene muchas cosas incorporadas, pero si no explicás qué quieres usar, no se usará.
Entonces, en el esquema de MTV (Modelo, Plantilla, Vista), la vista recibe una solicitud y usa una plantilla para generar una respuesta, pasando un diccionario o todas las variables locales (usando la función locals ()) de esta vista. Sabiendo esto, podemos insertar la URL actual que proviene de la respuesta, así:
views.py:
from django.shortcuts import render
def page(request):
currentUrl = request.get_full_path()
return render(request, ''app/page.html'', locals())
Luego, en la plantilla ''app / page.html'', solo tiene que hacer lo siguiente para mostrar la variableUrl actual que acabamos de crear y pasar a través de locals ():
app / template / page.html:
{{ currentUrl }}
En un archivo context_processors.py (o similar):
def myurl( request ):
return { ''myurlx'': request.get_full_path() }
En settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
...
wherever_it_is.context_processors.myurl,
...
En tu template.html:
myurl={{myurlx}}
Escribir un procesador de contexto personalizado. p.ej
def get_current_path(request):
return {
''current_path'': request.get_full_path()
}
agregue una ruta a esa función en su variable de configuración TEMPLATE_CONTEXT_PROCESSORS
, y úselo en su plantilla de esta manera:
{{ current_path }}
Si desea tener el objeto de request
completo en cada solicitud, puede usar el procesador de contexto incorporado django.core.context_processors.request
y luego usar {{ request.get_full_path }}
en su plantilla.
Ver:
Puedes ver si tu URL difiere de las demás.
{% if ''foo/bar/'' in request.get_full_path %}
Use la compilación de Django en el procesador de contexto para obtener la solicitud en el contexto de la plantilla. En la configuración, agregue procesador de request
a TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS = (
# Put your context processors here
''django.core.context_processors.request'',
)
Y en el uso de la plantilla:
{{ request.get_full_path }}
De esta forma, no necesita escribir ningún código nuevo usted mismo.