Django Reverse找不到参数'()'和关键字参数'{}'

嗨,我有一个真气问题。

我有这样的url模式:

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

它在浏览器中正常工作,但在testing中,当我在shell中执行此操作时:

 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. 

我在这里错过了什么?

你必须指定project_id

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

Doc 在这里

这个问题让我非常头痛,当我试图使用反向生成激活链接,并通过电子邮件发送当然。 所以我认为从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) 

解决也更直接

 from django.urls import resolve resolve('edit_project', project_id=4) 

这个快捷方式的文档

'app_name'是你给urlconfiguration的命名空间,而不是实际的应用程序名称。

正确的方法是将一个额外的参数添加到你的urlconfiguration – “命名空间”这将是实际的app_name'user2517191被提及和'edit_project'在client.get(reverse('app_name:edit_project')将是你给的URLconfiguration名称参数。