2012-11-02 122 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' )将是你给的网址配置名称参数。

相关问题