django.urls¶reverse()¶La traducción de los textos es la siguiente:
viewname puede ser el nombre de un patrón URL <naming-url-patterns>` o el objeto de vista callable utilizado en la URLconf. Por ejemplo, dado el siguiente url:
from news import views
path("archive/", views.archive, name="news-archive")
puedes utilizar cualquiera de las siguientes para revertir el URL:
# using the named URL
reverse("news-archive")
# passing a callable object
# (This is discouraged because you can't reverse namespaced views this way.)
from news import views
reverse(views.archive)
Si el URL acepta argumentos, puedes pasarlos en args. Por ejemplo:
from django.urls import reverse
def myview(request):
return HttpResponseRedirect(reverse("arch-summary", args=[1945]))
También puedes pasar kwargs en lugar de args. Por ejemplo:
>>> reverse("admin:app_list", kwargs={"app_label": "auth"})
'/admin/auth/'
args y kwargs no se pueden pasar a reverse() al mismo tiempo.
Si no se puede hacer una coincidencia, reverse() lanza una excepción NoReverseMatch.
La función reverse() puede revertir una gran variedad de patrones regulares para URLs, pero no todos los posibles. La principal restricción en este momento es que el patrón no puede contener elecciones alternativas utilizando el carácter vertical bar ("|"). Puedes utilizar dichos patrones con gusto para coincidir contra URL entrantes y enviarlas a vistas, pero no puedes revertir tales patrones.
El argumento current_app permite proporcionar una pista al resolutor indicando la aplicación a la que pertenece la vista actualmente ejecutada. Este argumento current_app se utiliza como pista para resolver nombres de espacio de aplicaciones en URLs en instancias de aplicación específicas, según la estrategia de resolución de URL <topics-http-reversing-url-namespaces>`.
El argumento urlconf es el módulo de URLconf que contiene los patrones URL para usar al revertir. Por defecto, se utiliza el root URLconf del hilo actual.
La query argumento de palabra clave especifica parámetros que se deben agregar a la URL devuelta. Puede aceptar una instancia de QueryDict (como request.GET) o cualquier valor compatible con urllib.parse.urlencode(). La cadena de consulta codificada se agrega a la URL resuelta, precedida por un ?.
La argumento de palabra clave fragment especifica un identificador de fragmento que se debe agregar a la URL devuelta (es decir, después de la ruta y la cadena de consulta, precedido por un #).
Ejemplo:
>>> from django.urls import reverse
>>> reverse("admin:index", query={"q": "biscuits", "page": 2}, fragment="results")
'/admin/?q=biscuits&page=2#results'
>>> reverse("admin:index", query=[("color", "blue"), ("color", 1), ("none", None)])
'/admin/?color=blue&color=1&none=None'
>>> reverse("admin:index", query={"has empty spaces": "also has empty spaces!"})
'/admin/?has+empty+spaces=also+has+empty+spaces%21'
>>> reverse("admin:index", fragment="no encoding is done")
'/admin/#no encoding is done'
Los argumentos query y fragment fueron agregados.
Nota
La cadena devuelta por reverse() ya está urlquoted. Por ejemplo:
>>> reverse("cities", args=["Orléans"])
'.../Orl%C3%A9ans/'
Aplicar codificación adicional (como urllib.parse.quote()) al resultado de reverse() puede producir resultados indeseables.
Reversando vistas basadas en clase por objeto de vista
El objeto de vista también puede ser el resultado de llamar a as_view() si se utiliza el mismo objeto de vista en la URLConf. Siguiendo el ejemplo original, el objeto de vista podría definirse como:
news/views.py¶ from django.views import View
class ArchiveView(View): ...
archive = ArchiveView.as_view()
Sin embargo, recuerda que las vistas nomencladas no pueden ser revertidas por objeto de vista.
reverse_lazy()¶Una versión evaluada de forma relajada de reverse().
Es útil cuando necesitas usar una reversión de URL antes de que se cargue la configuración de URLs de tu proyecto. Algunos casos comunes en los que es necesario esta función son:
proporcionar una URL revertida como el atributo url de una vista basada en clase genérica.
proporcionar una URL revertida a un decorador (como el argumento login_url para el decorador django.contrib.auth.decorators.permission_required()).
proporcionar una URL revertida como valor por defecto para un parámetro en la firma de una función.
Los argumentos query y fragment fueron agregados.
resolve()¶La función resolve() se puede utilizar para resolver rutas de URL a las funciones de vista correspondientes. Tiene la siguiente firma:
path es la ruta de URL que deseas resolver. Al igual que con reverse(), no necesitas preocuparte por el parámetro urlconf. La función devuelve un objeto ResolverMatch que te permite acceder a diversos metadatos sobre la URL resuelta.
Si la URL no se resuelve, la función lanza una excepción Resolver404 (una subclase de Http404) .
La función de vista que se utilizaría para servir la URL
Los argumentos que se pasarían a la función de vista, tal como se han parseado desde la URL.
Todos los argumentos clave que se pasarían a la función de vista, es decir captured_kwargs y extra_kwargs.
Los argumentos clave capturados que se pasarían a la función de vista, tal como se han parseado desde la URL.
Los argumentos clave adicionales que se pasarían a la función de vista.
El nombre del patrón de URL que coincide con la URL.
La ruta del patrón de URL coincidente.
Por ejemplo, si path('users/<id>/', ...) es el patrón coincidente, route contendrá 'users/<id>/'.
La lista de patrones de URL intentados antes de que la URL coincida con uno o agote los patrones disponibles.
El espacio de nombres de aplicación para el patrón de URL que coincide con la URL.
La lista de componentes de espacio de nombres individuales en el espacio de nombres de aplicación completo para el patrón de URL que coincide con la URL. Por ejemplo, si el app_name es 'foo:bar', entonces app_names será ['foo', 'bar'].
El espacio de nombres de la instancia para el patrón de URL que coincide con la URL.
La lista de componentes del espacio de nombres individual en el espacio de nombres completo de la instancia para el patrón de URL que coincide con la URL. Por ejemplo, si el espacio de nombres es foo:bar, entonces los espacios de nombres serán ['foo', 'bar'].
El nombre del vista que coincide con la URL, incluyendo el espacio de nombres si lo hay.
Un objeto ResolverMatch se puede interrogar para proporcionar información sobre el patrón de URL que coincide con una URL:
# Resolve a URL
match = resolve("/some/path/")
# Print the URL pattern that matches the URL
print(match.url_name)
Un objeto ResolverMatch también se puede asignar a un triple:
func, args, kwargs = resolve("/some/path/")
Una posible utilización de la función resolve() sería probar si una vista lanzaría un error Http404 antes de redirigir a ella:
from urllib.parse import urlsplit
from django.urls import resolve
from django.http import Http404, HttpResponseRedirect
def myview(request):
next = request.META.get("HTTP_REFERER", None) or "/"
response = HttpResponseRedirect(next)
# modify the request and response as required, e.g. change locale
# and set corresponding locale cookie
view, args, kwargs = resolve(urlsplit(next).path)
kwargs["request"] = request
try:
view(*args, **kwargs)
except Http404:
return HttpResponseRedirect("/")
return response
get_script_prefix()¶Normalmente, siempre debes utilizar la función reverse() para definir URLs dentro de tu aplicación. Sin embargo, si tu aplicación construye parte de la jerarquía de URL por sí misma, es posible que ocasionalmente necesites generar URLs. En ese caso, necesitarás poder encontrar la URL base del proyecto Django dentro de su servidor web (normalmente, reverse() se encarga de esto por ti). En ese caso, puedes llamar a get_script_prefix(), lo que devolverá la parte prefix de script de la URL para tu proyecto Django. Si tu proyecto Django está en la raíz de su servidor web, siempre es "/".
Advertencia
Esta función no puede ser utilizada fuera del ciclo de solicitud-respuesta ya que depende de valores inicializados durante ese ciclo.
may 31, 2026