J'ai du code et quand il s'exécute, il lance un NoReverseMatch, en disant:
NoReverseMatch at/my_url/Reverse pour 'my_url_name' avec les arguments '()' et les arguments de mots clés '{}' introuvables. n motif (s) essayé (s): []
Qu'est-ce que cela signifie et que puis-je faire à ce sujet?
L'erreur NoReverseMatch
indique que Django ne peut pas trouver de modèle d'URL correspondant à l'URL que vous avez fournie dans les 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 supprimer le message d'erreur qui vous est donné.
NoReverseMatch at/my_url /
Il s'agit de l'URL en cours de rendu. Il s'agit de l'URL à laquelle votre application tente actuellement d'accéder, mais elle contient une URL qui ne peut pas correspondre.
Inverse pour 'my_url_name'
Ceci est le nom de l'URL qu'il ne peut pas trouver
avec des arguments '()' et
Ce sont les arguments non-mot-clé qu'il fournit à l'URL
arguments de mot clé '{}' non trouvé.
Ce sont les arguments de mot clé qu'il fournit à l'URL
n motif (s) essayé (s): []
Ce sont les modèles qu’il a pu trouver dans vos fichiers urls.py qu’il a essayé 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 êtes en train de développer.
Une fois que cela est fait, lisez le code dans l'ordre que Django suivrait jusqu'à atteindre 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
de l'application (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 alors inclure l'espace de noms lors de l'annulation, 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 faire correspondre les groupes de capture présents dans l'URL donnée et pouvant être identifiés par les crochets ()
entourant le modèle d'URL.
En supposant que l'URL requise corresponde à des arguments supplémentaires, jetez un coup d'œil dans le message d'erreur et commencez par regarder si la valeur des arguments donnés semble être 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. Jetez un coup d'œil à l'endroit où vous lui affectez la valeur, définissez des points d'arrêt et vous devrez comprendre pourquoi cette valeur n'est pas transmise correctement.
L'argument de mot clé a une faute de frappe
Corrigez cela dans le modèle d'URL ou dans l'URL que vous construisez.
S'ils sont corrects:
Déboguer le regex
Vous pouvez utiliser un site Web tel que regexr pour vérifier rapidement si votre modèle correspond à l'URL que vous pensez créer. Copiez le modèle d'URL dans le champ d'expression régulière situé en haut, puis utilisez la zone de texte pour inclure les URL. que vous pensez qu'il devrait correspondre.
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 a-Z
ou \w
au lieu de a-z
ou A-Z
Vérifiez que le motif que vous faites correspondre est inclus dans les motifs essayés
Si ce n'est pas le cas, il est possible que vous ayez oublié d'inclure votre application dans le paramètre INSTALLED_APPS
(ou vous devrez peut-être examiner l'ordre des applications dans INSTALLED_APPS
).
Dans Django 1.10, la possibilité d'inverser une URL par son chemin python a été supprimée. Le chemin nommé devrait être utilisé à la place.
Si vous ne parvenez toujours pas à identifier le problème, n'hésitez pas à poser une nouvelle question comprenant ce que vous avez essayé, ce que vous avez recherché (vous pouvez créer un lien vers cette question), puis à inclure le code correspondant dans le fichier. issue - l'url que vous correspondez, tous les modèles d'URL pertinents, la partie du message d'erreur indiquant ce que Django a tenté de faire correspondre, et éventuellement le paramètre INSTALLED_APPS
, le cas échéant.
Et assurez-vous que votre itinéraire figure dans la liste des itinéraires:
./manage.py show_urls | grep path_or_name