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名称参数。