Salut, j'ai un problème exaspérant.
J'ai un modèle d'URL comme celui-ci:
# mproject/myapp.urls.py
url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),
cela fonctionne bien dans le navigateur mais pour les tests, quand je fais cela dans le shell:
from django.test import Client
from django.core.urlresolvers import reverse
client= Client()
response = client.get(reverse('edit_project'), project_id=4)
Je reçois le redouté:
NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found.
Qu'est-ce que j'oublie ici?
django
django-testing
Darwin Tech
la source
la source
from django.urls import reverse
Réponses:
Vous devez préciser
project_id
:Doc ici
la source
La solution @ miki725 est absolument correcte. Alternativement, si vous souhaitez utiliser l'
args
attribut par opposition àkwargs
, vous pouvez simplement modifier votre code comme suit:Un exemple de ceci peut être trouvé dans la documentation . Cela fait essentiellement la même chose, mais les attributs sont passés en arguments. N'oubliez pas que tous les arguments transmis doivent recevoir une valeur avant d'être inversés. Utilisez simplement l'espace de noms correct, ce qui est dans ce cas
'edit_project'
.la source
Ces problèmes m'ont donné beaucoup de mal à la tête lorsque j'ai essayé d'utiliser la fonction inverse pour générer un lien d'activation et l'envoyer par e-mail bien sûr. Donc, je pense que de tests.py ce sera la même chose. La bonne façon de procéder est la suivante:
la source
Resolve est également plus simple
Documentation sur ce raccourci
la source