¿Cómo obtener la URL actual dentro de una plantilla de Django?

Resuelto dotty asked hace 14 años • 16 respuestas

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?

dotty avatar May 21 '10 20:05 dotty
Aceptado

Django 1.9 y superior:

## template
{{ request.path }}  #  -without GET parameters 
{{ request.get_full_path }}  # - with GET parameters

Viejo:

## 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 }}
httpete avatar Dec 08 '2011 13:12 httpete

Puede recuperar 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.

Se deben aportar algunas precisiones y correcciones a las respuestas de Hypete e Ignacio , solo resumiré toda la idea aquí, para referencia futura.

Si necesita la requestvariable en la plantilla, debe agregar 'django.core.context_processors.request' a la TEMPLATE_CONTEXT_PROCESSORSconfiguración, no es la opción predeterminada (Django 1.4).

Tampoco debe olvidar los otros procesadores de contexto utilizados por sus aplicaciones. Entonces, para agregar la solicitud a los otros procesadores predeterminados, puede agregar esto en su configuración, para evitar codificar la lista de procesadores predeterminados (que muy bien puede cambiar 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 requestcontenido de 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)
    )
RedGlyph avatar Apr 15 '2012 14:04 RedGlyph

El siguiente código me ayuda:

 {{ request.build_absolute_uri }}
Евгений Шабин avatar Nov 12 '2019 06:11 Евгений Шабин

Ambos {{ request.path }} and {{ request.get_full_path }}devuelven la URL actual pero no la URL absoluta, por ejemplo:

your_website.com/wallpapers/new_wallpaper

Ambos regresarán /new_wallpaper/ (observe las barras diagonales iniciales y finales)

Entonces tendrás que hacer algo como

{% if request.path == '/new_wallpaper/' %}
    <button>show this button only if url is new_wallpaper</button>
{% endif %}

Sin embargo, puedes obtener la URL absoluta usando (gracias a la respuesta anterior)

{{ request.build_absolute_uri }}

NOTA: no es necesario incluirlo requests, settings.pyya está allí.

Mujeeb Ishaque avatar Nov 16 '2019 14:11 Mujeeb Ishaque

En la plantilla de Django
Simplemente obtenga la URL actual {{request.path}}
para obtener la URL completa con parámetros{{request.get_full_path}}

Nota : debes agregar requestdjangoTEMPLATE_CONTEXT_PROCESSORS

Savad KP avatar Jan 15 '2016 07:01 Savad KP