Django Reverse mit Argumenten '()' und Schlüsselwortargumenten '{}' nicht gefunden


144

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?


Im letzten Django wird das Reverse aus URLs importiert. dhfrom django.urls import reverse
suhailvs

Antworten:



6

Die Lösung @ miki725 ist absolut korrekt. Alternativ, wenn Sie die verwenden möchtenargs Attribut im Gegensatz zu verwendenkwargs , können Sie Ihren Code einfach wie folgt ändern:

project_id = 4
reverse('edit_project', args=(project_id,))

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'.


1
Ich mag seine Kürze.
Bartleby

2

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:

from django.test import Client
from django.core.urlresolvers import reverse

#app name - name of the app where the url is defined
client= Client()
response = client.get(reverse('app_name:edit_project', project_id=4)) 

1
Ich habe es gerade versucht, es funktioniert nicht. Die Antwort von @ miki725 ist korrekt.
Daniel van Flymen

1
Ich glaube, eine Zahnspange ist am falschen Ort: response = client.get (reverse ('edit_project', project_id = 4))
Wim Feijen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.