2012-11-02 7 views
78

Hallo, ich habe ein ärgerliches Problem.Django Reverse mit Argumenten '()' und Schlüsselwortargumenten '{}' nicht gefunden

Ich habe eine URL-Muster wie folgt aus:

# mproject/myapp.urls.py 

url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'), 

es funktioniert im Browser in Ordnung, aber für die Prüfung, wenn ich dies tun in der Schale:

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

client= Client() 
response = client.get(reverse('edit_project'), project_id=4) 

ich die gefürchtete erhalten:

NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found. 

Was fehlt mir hier?

Antwort

147

Sie haben project_id angeben:

reverse('edit_project', kwargs={'project_id':4}) 

Doc here

+0

Großen. Danke. ich jede Konfiguration, außer dass man versucht haben muss! –

+0

Könnten Sie po Natürlich auch, wie man das in einer Vorlage macht? –

+1

[docs] (https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#url) habe Beispiele – miki725

1

Diese Probleme mir große Kopfschmerzen gab, als ich versuchte, die umgekehrt zu verwenden, um Aktivierungslink zu erzeugen und per E-Mail natürlich senden. Also ich denke von tests.py wird es gleich sein. Der richtige Weg, dies zu tun, ist folgende:

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) 
+0

Ich habe es gerade versucht, es funktioniert nicht. @ Miki725's Antwort ist richtig. –

+1

Ich glaube, dass eine Klammer an der falschen Stelle ist: response = client.get (reverse ('edit_project', project_id = 4)) –

-2

Die ‚app_name‘ ist der Namespace Sie auf die URL Config gab und nicht unbedingt den Namen der App.

Der korrekte Weg wäre, einen zusätzlichen Parameter zu Ihrer URL-Konfiguration hinzuzufügen - 'Namespace' das wäre tatsächlich der 'app_name' welcher Benutzer2517191 erwähnt wurde und 'edit_project' in client.get (reverse ('app_name: edit_project') würde den Namen Parameter Sie bei der uRL Config gab.

Verwandte Themen