2012-11-02 120 views
78

嗨,我有一個真氣問題。Django反向參數'()'和關鍵字參數'{}'找不到

我有一個這樣的URL模式:

# mproject/myapp.urls.py 

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

它工作正常,在瀏覽器中,但進行測試,我這樣做的外殼時:

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

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

我得到了可怕的:

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

我在這裏錯過了什麼?

回答

147

您必須指定project_id

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

文件here

+0

太好了。謝謝你。我必須嘗試不同的是每隔一個配置! –

+0

莫非你PO可靠嗎還包括如何在模板中做到這一點? –

+1

[文檔](https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#url)有例子 – miki725

1

這個問題讓我十分頭疼的問題,當我試圖使用反向生成激活鏈接,並通過課程的電子郵件發送。所以我認爲從tests.py它會一樣。 這樣做的正確方法是如下:

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

我剛試過這個,它不起作用。 @ miki725的回答是正確的。 –

+1

我相信一個大括號是在錯誤的地方:response = client.get(reverse('edit_project',project_id = 4)) –

-2

的「APP_NAME」是你給的網址配置命名空間,而不是實際的應用程序的名稱。

正確的方法是將一個額外的參數添加到你的url配置 - '命名空間'這將實際上'app_name'user2517191被提及和'edit_project'在client.get(reverse('app_name:edit_project' )將是你給的網址配置名稱參數。

相關問題