El NoReverseMatch
error dice que Django no puede encontrar un patrón de URL coincidente para la URL que proporcionó en ninguna de las URL de su aplicación instalada.
La excepción NoReverseMatch la genera django.core.urlresolvers cuando no se puede identificar una URL coincidente en su URLconf según los parámetros proporcionados.
Para comenzar a depurarlo, debe comenzar diseccionando el mensaje de error que se le proporcionó.
NoReverseMatch en / my_url /
Esta es la URL que se está procesando actualmente, es esta URL a la que su aplicación está intentando acceder actualmente, pero contiene una URL que no puede coincidir
Invertir para 'my_url_name'
Este es el nombre de la URL que no puede encontrar.
con argumentos '()' y
Estos son los argumentos que no son palabras clave que proporciona a la URL.
No se han encontrado los argumentos de palabra clave '{}'.
Estos son los argumentos de palabras clave que proporciona a la URL.
n patrón (s) probado: []
Estos son los patrones que pudo encontrar en sus archivos urls.py con los que intentó hacer coincidir
Comience por ubicar el código en su fuente relevante para la URL que se está procesando actualmente: la URL, la vista y cualquier plantilla involucrada. En la mayoría de los casos, esta será parte del código que está desarrollando actualmente.
Una vez que hayas hecho esto, lee el código en el orden que seguiría django hasta que llegues a la línea de código que está intentando construir una URL para tu my_url_name
. Una vez más, probablemente se encuentre en un lugar que ha cambiado recientemente.
Ahora que ha descubierto dónde está ocurriendo el error, utilice las otras partes del mensaje de error para solucionar el problema.
El nombre de la URL
- ¿Hay errores tipográficos?
- ¿Ha proporcionado la URL con la que está intentando acceder al nombre de pila?
- Si tiene un juego nombre_apl en la aplicación de
urls.py
(por ejemplo app_name = 'my_app'
) o si se incluye la aplicación con un espacio de nombres (por ejemplo include('myapp.urls', namespace='myapp')
, entonces es necesario incluir el espacio de nombres al dar marcha atrás, por ejemplo, {% url 'myapp:my_url_name' %}
o reverse('myapp:my_url_name')
.
Argumentos y argumentos de palabras clave
Los argumentos y los argumentos de palabras clave se utilizan para hacer coincidir los grupos de captura que están presentes dentro de la URL dada, que pueden ser identificados por los ()
corchetes circundantes en el patrón de URL.
Suponiendo que la URL que está buscando requiere argumentos adicionales, eche un vistazo al mensaje de error y primero observe si el valor de los argumentos dados parece ser correcto.
Si no son correctos:
Falta el valor o es una cadena vacía
Esto generalmente significa que el valor que está pasando no contiene el valor que espera que sea. Eche un vistazo a dónde le asigna el valor, establece puntos de interrupción y deberá averiguar por qué este valor no se transfiere correctamente.
El argumento de la palabra clave tiene un error tipográfico
Corrija esto en el patrón de URL o en la URL que está creando.
Si son correctos:
Depurar la expresión regular
Puede usar un sitio web como regexr para probar rápidamente si su patrón coincide con la URL que cree que está creando, copie el patrón de URL en el campo regex en la parte superior y luego use el área de texto para incluir las URL que crea debe coincidir con.
Errores comunes:
Coincidencia con el .
carácter comodín o cualquier otro carácter regex
Recuerde escapar de los caracteres específicos con un \
prefijo
Solo coincide con caracteres en minúsculas / mayúsculas
Intente usar a-Z
o en \w
lugar de a-z
oA-Z
Verifique que el patrón que está haciendo coincidir esté incluido dentro de los patrones probados
Si no está aquí, es posible que se haya olvidado de incluir su aplicación en la INSTALLED_APPS
configuración (o es INSTALLED_APPS
posible que deba examinar el orden de las aplicaciones )
Versión de Django
En Django 1.10, se eliminó la capacidad de revertir una URL por su ruta de Python. En su lugar, debe usarse la ruta nombrada.
Si aún no puede localizar el problema, no dude en hacer una nueva pregunta que incluya lo que ha intentado, lo que ha investigado (puede vincular a esta pregunta), y luego incluya el código relevante en el problema: la URL que está haciendo coincidir, cualquier patrón de URL relevante, la parte del mensaje de error que muestra lo que django intentó hacer coincidir y posiblemente la INSTALLED_APPS
configuración, si corresponde.
set app_name in the app's urls.py (e.g. app_name = 'my_app')
es el puntoY asegúrese de que su ruta en la lista de rutas:
https://github.com/django-extensions/django-extensions
fuente
show_urls
no es una característica de Django, esto no responderá la pregunta.