reverse()

Si necesita usar algo similar al url plantilla en su código, Django proporciona la siguiente función:

reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)

viewname puede ser un Nombre del patrón de URL o el objeto de vista invocable. Por ejemplo, dado lo siguiente url:

from news import views

path('archive/', views.archive, name='news-archive')

puede utilizar cualquiera de los siguientes para invertir la 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 la URL acepta argumentos, puede pasarlos args. Por ejemplo:

from django.urls import reverse

defmyview(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 puede pasar a reverse() al mismo tiempo.

Si no se puede hacer ninguna coincidencia, reverse() plantea un NoReverseMatch excepción.

los reverse() La función puede revertir una gran variedad de patrones de expresión regular para URL, pero no todos los posibles. La principal restricción en este momento es que el patrón no puede contener opciones alternativas usando la barra vertical ("|") personaje. Puede utilizar dichos patrones con mucho gusto para hacer coincidir las URL entrantes y enviarlas a las vistas, pero no puede revertir dichos patrones.

los current_app El argumento le permite proporcionar una pista al resolutor indicando la aplicación a la que pertenece la vista que se está ejecutando actualmente. Esta current_app El argumento se utiliza como una sugerencia para resolver los espacios de nombres de aplicaciones en URL en instancias de aplicaciones específicas, de acuerdo con el estrategia de resolución de URL con espacios de nombres.

los urlconf El argumento es el módulo URLconf que contiene los patrones de URL que se utilizarán para invertir. De forma predeterminada, se utiliza la URLconf raíz para el hilo actual.

Nota

los string devuelto por reverse() ya está urlquoted. Por ejemplo:

>>> reverse('cities', args=['Orléans'])'.../Orl%C3%A9ans/'

Aplicar más codificación (como urllib.parse.quote()) a la salida de reverse() puede producir resultados no deseados.

reverse_lazy()

Una versión evaluada de forma perezosa de reverse ().

reverse_lazy(viewname, urlconf=None, args=None, kwargs=None, current_app=None)

Es útil cuando necesita usar una reversión de URL antes de que se cargue el URLConf de su proyecto. Algunos casos comunes donde esta función es necesaria son:

  • proporcionando una URL invertida como url attribute de una vista genérica basada en clases.
  • proporcionar una URL invertida a un decorador (como el login_url argumento para el django.contrib.auth.decorators.permission_required() decorador).
  • proporcionar una URL invertida como valor predeterminado para un parámetro en la firma de una función.

resolve()

los resolve() La función se puede utilizar para resolver rutas de URL a las funciones de vista correspondientes. Tiene la siguiente firma:

resolve(path, urlconf=None)

path es la ruta URL que desea resolver. Al igual que con reverse(), no necesitas preocuparte por el urlconf parámetro. La función devuelve un ResolverMatch objeto que le permite acceder a varios metadatos sobre la URL resuelta.

Si la URL no se resuelve, la función genera un Resolver404 excepción (una subclase de Http404).

class ResolverMatch
func

La función de vista que se usaría para publicar la URL.

args

Los argumentos que se pasarían a la función de vista, analizados desde la URL.

kwargs

Los argumentos de palabras clave que se pasarían a la función de vista, analizados a partir de la URL.

url_name

El nombre del patrón de URL que coincide con la URL.

route

La ruta del patrón de URL coincidente.

Por ejemplo, si path('users//', ...) es el patrón coincidente, route contendrá 'users//'.

tried
Nuevo en Django 3.2.

La lista de patrones de URL probados antes de que la URL coincidiera con uno o agotó los patrones disponibles.

app_name

El espacio de nombres de la aplicación para el patrón de URL que coincide con la URL.

app_names

La lista de componentes de espacio de nombres individuales en el espacio de nombres de la aplicación completo para el patrón de URL que coincide con la URL. Por ejemplo, si el app_name es 'foo:bar', luego app_names estarán ['foo', 'bar'].

namespace

El espacio de nombres de la instancia para el patrón de URL que coincide con la URL.

namespaces

La lista de componentes de espacio de nombres individuales en el espacio de nombres de instancia completo para el patrón de URL que coincide con la URL. es decir, si el espacio de nombres es foo:bar, entonces los espacios de nombres serán ['foo', 'bar'].

view_name

El nombre de la vista que coincide con la URL, incluido el espacio de nombres si lo hay.

A ResolverMatch Luego, el objeto 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 URLprint(match.url_name)

A ResolverMatch El objeto también se puede asignar a un triple:

func, args, kwargs = resolve('/some/path/')

Un posible uso de resolve() sería probar si una vista suscitaría una Http404 error antes de redirigir a él:

from urllib.parse import urlparse
from django.urls import resolve
from django.http import Http404, HttpResponseRedirect

defmyview(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(urlparse(next)[2])
    kwargs['request']= request
    try:
        view(*args,**kwargs)except Http404:return HttpResponseRedirect('/')return response

get_script_prefix()

get_script_prefix()

Normalmente, siempre debes usar reverse() para definir URL dentro de su aplicación. Sin embargo, si su aplicación construye parte de la jerarquía de URL en sí, es posible que ocasionalmente necesite generar URL. En ese caso, debe poder encontrar la URL base del proyecto Django dentro de su servidor web (normalmente, reverse() se encarga de esto por ti). En ese caso, puede llamar get_script_prefix(), que devolverá el script prefix parte de la URL de su proyecto Django. Si su proyecto Django está en la raíz de su servidor web, esto siempre es "/".