Réponses:
L' NoReverseMatch
erreur indique que Django ne trouve pas de modèle d'URL correspondant à l'URL que vous avez fournie dans l'une des URL de votre application installée.
L'exception NoReverseMatch est déclenchée par django.core.urlresolvers lorsqu'une URL correspondante dans votre URLconf ne peut pas être identifiée en fonction des paramètres fournis.
Pour commencer à le déboguer, vous devez commencer par décomposer le message d'erreur qui vous est donné.
NoReverseMatch à / my_url /
Il s'agit de l'URL en cours de rendu, c'est cette URL à laquelle votre application tente actuellement d'accéder mais elle contient une URL qui ne peut pas être mise en correspondance
Inverser pour "my_url_name"
C'est le nom de l'url qu'il ne trouve pas
avec des arguments '()' et
Ce sont les arguments non-mot-clé qu'il fournit à l'url
arguments de mot clé '{}' introuvables.
Ce sont les arguments de mots clés qu'il fournit à l'url
n motif (s) essayé (s): []
Voici les modèles qu'il a pu trouver dans vos fichiers urls.py avec lesquels il a tenté de faire correspondre
Commencez par localiser le code dans votre source correspondant à l'URL en cours de rendu - l'url, la vue et tous les modèles impliqués. Dans la plupart des cas, ce sera la partie du code que vous développez actuellement.
Une fois que vous avez fait cela, lisez le code dans l'ordre que django suivrait jusqu'à ce que vous atteigniez la ligne de code qui tente de construire une URL pour votre my_url_name
. Encore une fois, c'est probablement dans un endroit que vous avez récemment changé.
Maintenant que vous avez découvert où l'erreur se produit, utilisez les autres parties du message d'erreur pour résoudre le problème.
urls.py
(par exemple app_name = 'my_app'
) ou si vous avez inclus l'application avec un espace de noms (par exemple include('myapp.urls', namespace='myapp')
, vous devez inclure l'espace de noms lors de l'inversion, par exemple {% url 'myapp:my_url_name' %}
ou reverse('myapp:my_url_name')
.Les arguments et les arguments de mot-clé sont utilisés pour correspondre à tous les groupes de capture présents dans l'URL donnée qui peuvent être identifiés par les ()
crochets entourant le modèle d'URL.
En supposant que l'URL que vous correspondez nécessite des arguments supplémentaires, regardez dans le message d'erreur et regardez d'abord si la valeur des arguments donnés semble correcte.
S'ils ne sont pas corrects:
La valeur est manquante ou une chaîne vide
Cela signifie généralement que la valeur que vous transmettez ne contient pas la valeur que vous attendez. Regardez où vous lui attribuez la valeur, définissez des points d'arrêt et vous devrez comprendre pourquoi cette valeur n'est pas transmise correctement.
L'argument mot-clé a une faute de frappe
Corrigez cela soit dans le modèle d'url, soit dans l'url que vous construisez.
S'ils sont corrects:
Déboguer le regex
Vous pouvez utiliser un site Web tel que regexr pour tester rapidement si votre modèle correspond à l'url que vous pensez créer, copiez le modèle d'URL dans le champ regex en haut, puis utilisez la zone de texte pour inclure toutes les URL que vous pensez devrait correspondre contre.
Erreurs fréquentes:
Correspondance avec le .
caractère joker ou tout autre caractère regex
N'oubliez pas d'échapper aux caractères spécifiques avec un \
préfixe
Correspondance uniquement avec les caractères minuscules / majuscules
Essayez d'utiliser soit a-Z
ou à la \w
place de a-z
ouA-Z
Vérifiez que le modèle que vous correspondez est inclus dans les modèles essayés
Si ce n'est pas ici, il est possible que vous ayez oublié d'inclure votre application dans le INSTALLED_APPS
paramètre (ou l'ordre des applications dans INSTALLED_APPS
peut nécessiter un examen)
Dans Django 1.10, la possibilité d'inverser une URL par son chemin python a été supprimée. Le chemin nommé doit être utilisé à la place.
Si vous ne parvenez toujours pas à localiser le problème, n'hésitez pas à poser une nouvelle question qui comprend ce que vous avez essayé, ce que vous avez recherché (vous pouvez créer un lien vers cette question), puis inclure le code correspondant au issue - l'url que vous correspondez, tous les modèles d'URL pertinents, la partie du message d'erreur qui montre ce que django a essayé de faire correspondre, et éventuellement le INSTALLED_APPS
paramètre le cas échéant.
set app_name in the app's urls.py (e.g. app_name = 'my_app')
c'est le point
Et assurez-vous que votre itinéraire dans la liste des itinéraires:
./manage.py show_urls | grep path_or_name
show_urls
n'est pas une fonctionnalité Django, cela ne répondra pas à la question.