Buscamos por el mundo online para traerte la solución a tu duda, en caso de dificultades puedes dejarnos tu duda y te contestaremos con gusto.
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 eldjango.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'
, luegoapp_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 "/"
.
Tienes la opción de añadir valor a nuestro contenido informacional colaborando tu veteranía en las ilustraciones.