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


144

嗨,我有一个令人毛骨悚然的问题。

我有这样的网址格式:

# 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.

我在这里想念什么?


最新的django中,反向是从URL导入的。即from django.urls import reverse
suhailvs

Answers:



6

解决方案@ miki725是绝对正确的。另外,如果您想使用args而不是的属性kwargs,则只需按如下所示修改代码即可:

project_id = 4
reverse('edit_project', args=(project_id,))

可以在文档中找到一个示例。这本质上是做同样的事情,但是属性作为参数传递。请记住,传递的所有参数在反转之前都需要分配一个值。只需使用正确的名称空间,在这种情况下为'edit_project'


1
我喜欢它的简洁。
巴特比

2

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

1
我只是试过了,所以不起作用。@ miki725的答案是正确的。
丹尼尔·范·弗莱门

1
我认为括号在错误的位置:response = client.get(reverse('edit_project',project_id = 4))
Wim Feijen

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.