with variable template tag pass parameter links django django-urls django-templates

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.