Hallo, ich habe ein ärgerliches Problem.
Ich habe ein URL-Muster wie dieses:
# mproject/myapp.urls.py
url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),
es funktioniert gut im Browser, aber zum Testen, wenn ich dies in der Shell mache:
from django.test import Client
from django.core.urlresolvers import reverse
client= Client()
response = client.get(reverse('edit_project'), project_id=4)
Ich bekomme das gefürchtete:
NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found.
Was fehlt mir hier?
django
django-testing
Darwin Tech
quelle
quelle
from django.urls import reverse
Antworten:
Sie müssen angeben
project_id
:Doc hier
quelle
Die Lösung @ miki725 ist absolut korrekt. Alternativ, wenn Sie die verwenden möchten
args
Attribut im Gegensatz zu verwendenkwargs
, können Sie Ihren Code einfach wie folgt ändern:Ein Beispiel hierfür finden Sie in der Dokumentation . Dies macht im Wesentlichen dasselbe, aber die Attribute werden als Argumente übergeben. Denken Sie daran, dass übergebenen Argumenten vor dem Umkehren ein Wert zugewiesen werden muss. Verwenden Sie einfach den richtigen Namespace, in diesem Fall
'edit_project'
.quelle
Diese Probleme bereiteten mir große Kopfschmerzen, als ich versuchte, Reverse zum Generieren eines Aktivierungslinks zu verwenden und ihn natürlich per E-Mail zu senden. Also ich denke von tests.py wird es das gleiche sein. Der richtige Weg, dies zu tun, ist folgender:
quelle
Das Auflösen ist auch einfacher
Dokumentation zu dieser Verknüpfung
quelle