没有找到带有参数“()”和关键字参数“”的 Django Reverse

Posted

技术标签:

【中文标题】没有找到带有参数“()”和关键字参数“”的 Django Reverse【英文标题】:Django Reverse with arguments '()' and keyword arguments '' not found没有找到带有参数“()”和关键字参数“”的 Django Reverse 【发布时间】:2012-10-23 12:49:31 【问题描述】:

嗨,我有一个令人恼火的问题。

我有一个这样的 url 模式:

# mproject/myapp.urls.py

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

它在浏览器中运行良好,但对于测试,当我在 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.

我在这里缺少什么?

【问题讨论】:

在lastest django中,reverse是从urls导入的。即from django.urls import reverse 【参考方案1】:

你必须指定project_id:

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

文档here

【讨论】:

您能否在模板中包含如何执行此操作? docs 有例子 工作得像个骗子!【参考方案2】:

@miki725 的解决方案是绝对正确的。或者,如果您想使用 args 属性而不是 kwargs,那么您可以简单地修改您的代码,如下所示:

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

这方面的一个例子可以在documentation 中找到。这基本上做同样的事情,但属性作为参数传递。请记住,传递的任何参数都需要在反转之前分配一个值。只需使用正确的命名空间,在本例中为 'edit_project'

【讨论】:

我喜欢它的简洁。【参考方案3】:

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

【讨论】:

我刚试过,不行。 @miki725 的回答是正确的。 我认为大括号放错了位置:response = client.get(reverse('edit_project', project_id=4))【参考方案4】:

函数resolve_url也更直接

from django.shortcuts import resolve_url

resolve_url('edit_project', project_id=4)

Documentation on this shortcut

【讨论】:

恭敬地尝试过,但对我不起作用。我要坚持反向。 2018 Django 2 @SebCorbin,从字面上看,您并不了解 resolve 函数。它的第一个参数是路径而不是 url_name @Wariored 感谢您的评论,我注意到我指的是错误的函数,而且它似乎没有记录在官方文档中,只有在源代码中。已编辑以解决此问题

以上是关于没有找到带有参数“()”和关键字参数“”的 Django Reverse的主要内容,如果未能解决你的问题,请参考以下文章

“未找到带有参数 '()' 和关键字参数 '' 的 '' 的反向操作。”

未找到带有参数“(”,)”和关键字参数“”的“比率”的反向

未找到带有参数“()”和关键字参数“”的“登录”的反向操作

未找到带有参数“()”和关键字参数“”的“password_change_done”的反向

未找到带有参数“()”和关键字参数“”的“send_referral_code”的反向

未找到带有参数“()”和关键字参数“”的“guestbook.posts”的反向操作。尝试了 0 种模式:[]