urls template django django-urls

django - template - ¿Qué es un error NoReverseMatch y cómo lo soluciono?



django views (3)

El error de NoReverseMatch dice que Django no puede encontrar un patrón de URL coincidente para la url que proporcionó en cualquiera de las URL de su aplicación instalada.

La excepción NoReverseMatch es provocada por django.core.urlresolvers cuando no se puede identificar una URL coincidente en su URLconf en función de los parámetros proporcionados.

Para comenzar a depurarlo, debe comenzar diseñando 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

  • argumentos de palabras clave ''{}'' no encontrados.

    Estos son los argumentos de palabras clave que proporciona a la URL.

  • n patrón (s) probado (s): []

    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á representando actualmente: la url, la vista y las plantillas involucradas. En la mayoría de los casos, esta será la parte del código que está desarrollando actualmente.

Una vez que haya hecho esto, lea el código en el orden que seguiría django hasta llegar a la línea de código que intenta construir una url para su my_url_name . De nuevo, esto probablemente se encuentre en un lugar que haya cambiado recientemente.

Ahora que ha descubierto dónde se produce el error, use las otras partes del mensaje de error para resolver el problema.

El nombre de la url

  • ¿Hay algún error tipográfico?
  • ¿Has proporcionado la URL a la que intentas acceder el nombre de pila?
  • Si ha configurado app_name en urls.py de la aplicación (por ejemplo, app_name = ''my_app'' ) o si incluyó la aplicación con un espacio de nombres (por ejemplo, include(''myapp.urls'', namespace=''myapp'') , debe incluir el espacio de nombres cuando se invierte, 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 usan para hacer coincidir los grupos de captura que están presentes dentro de la url dada que pueden identificarse mediante los corchetes () circundantes en el patrón de url.

Suponiendo que la url con la que coincida requiere argumentos adicionales, eche un vistazo al mensaje de error y primero eche un vistazo si el valor de los argumentos dados parece ser correcto.

Si no son correctos:

  • Falta el valor o una cadena vacía

    Esto generalmente significa que el valor que está pasando no contiene el valor que espera que sea. Observe dónde le asigna el valor, establece puntos de interrupción y tendrá que descubrir por qué este valor no se transmite correctamente.

  • El argumento de la palabra clave tiene un error tipográfico

    Corrija esto ya sea en el patrón de URL o en la url que está construyendo.

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 cualquier url que le parezca debe coincidir contra.

    Errores comunes:

    • Emparejamiento contra 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 aZ o /w lugar de az o AZ

  • Comprueba que el patrón que estás combinando está incluido dentro de los patrones probados

    Si no está aquí, entonces es posible que haya olvidado incluir su aplicación dentro de la configuración INSTALLED_APPS (o puede ser necesario ver el pedido de las aplicaciones dentro de INSTALLED_APPS )

Versión Django

En Django 1.10, se eliminó la capacidad de invertir una url por su ruta de Python. La ruta nombrada debe usarse en su lugar.

Si aún no puede rastrear 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 incluir el código relevante problema: la url que está haciendo coincidir, los patrones de url relevantes, la parte del mensaje de error que muestra lo que django intentó hacer coincidir y posiblemente la configuración INSTALLED_APPS , si corresponde.

Tengo un código y cuando se ejecuta, arroja un NoReverseMatch, que dice:

NoReverseMatch en / my_url / Reverso para ''my_url_name'' con argumentos ''()'' y argumentos de palabras clave ''{}'' no encontrados. n patrón (s) probado (s): []

¿Qué significa esto y qué puedo hacer al respecto?