Django反向解析未找到带有'()'参数和'{}'关键字参数的内容。
Django反向解析未找到带有'()'参数和'{}'关键字参数的内容。
我有一个令人恼火的问题。\n我有一个像这样的URL模式:\n
# mproject/myapp.urls.py url(r'^project/(?P\d+)/$','user_profile.views.EditProject',name='edit_project'),
\n在浏览器中它工作得很好,但是在测试中,当我在shell中进行以下操作时:\n
from django.test import Client from django.core.urlresolvers import reverse client= Client() response = client.get(reverse('edit_project'), project_id=4)
\n我遇到了可怕的错误:\n
NoReverseMatch: 找不到参数为“()”和关键字参数为“{}”的'edit_project'的反向匹配。
\n我在这里漏掉了什么?
文章标题:Django反向解析问题的原因和解决方法
在使用Django生成激活链接并通过电子邮件发送时,我遇到了一个大问题。我认为从tests.py中进行测试应该是一样的。
正确的做法如下:
from django.test import Client from django.core.urlresolvers import reverse # app_name是定义URL的应用程序的名称 client = Client() response = client.get(reverse('app_name:edit_project', project_id=4))
我尝试了上述代码,但没有成功。's'的答案是正确的。
我认为括号放错了位置:response = client.get(reverse('edit_project', project_id=4))
以上就是出现问题的原因以及解决方法。
(Django Reverse with arguments '()' and keyword arguments '{}' not found)这个问题的出现的原因是在使用Django的reverse函数时,没有正确地传递参数。解决方法是通过args参数或kwargs参数将参数传递给reverse函数。
如果想使用args参数,可以按照以下方式修改代码:
project_id = 4 reverse('edit_project', args=(project_id,))
也可以使用kwargs参数来传递参数:
project_id = 4 reverse('edit_project', kwargs={'project_id': project_id})
需要注意的是,传递的参数在反向解析之前需要先赋值。同时,确保使用正确的命名空间,这里是'edit_project'。
在Django的文档中可以找到这个问题的示例以及更多的说明。这种方法简洁明了,非常实用。
在使用Django的reverse函数时,如果没有指定必需的参数,就会出现(Django Reverse with arguments '()' and keyword arguments '{}' not found)这个错误。
解决方法是在reverse函数中指定必需的参数。例如,在给定的代码中,需要指定参数project_id,可以这样写:
reverse('edit_project', kwargs={'project_id':4})
在模板中使用reverse函数的方法也可以在Django的文档中找到。可以参考这个链接:docs。
以上方法经过测试,是有效的解决方案。