如何将django.core.urlresolvers.reverse与函数引用而不是命名的URL模式一起使用?

StackOverflow https://stackoverflow.com/questions/134629

  •  02-07-2019
  •  | 
  •  

在我的 urls.py 文件中,我有:

from myapp import views
...
(r'^categories/

categories myapp / views.py 中的一个视图函数。没有其他URLconf行引用 views.categories

在单元测试文件中,我试图使用 django.core.urlresolvers.reverse()来获取此URL,而不是仅仅复制'/ categories /'(DRY和所有那)。所以,我有:

from django.core.urlresolvers import reverse
from myapp import views
...

url = reverse(views.categories)

当我运行测试时,我得到 NoReverseMatch 错误:

NoReverseMatch: Reverse for '<function categories at 0x1082f30>' with arguments '()' and keyword arguments '{}' not found.

如果我将URL模式设为命名模式,它就匹配得很好,如下所示:

url(r'^categories/

并使用模式名称来匹配它:

url = reverse('myapp-categories')

但据我所知,从 reverse 文档,我不应该只是使用 reverse 使其成为命名的URL模式。

任何想法我做错了什么?

, views.categories)

categories myapp / views.py 中的一个视图函数。没有其他URLconf行引用 views.categories

在单元测试文件中,我试图使用 django.core.urlresolvers.reverse()来获取此URL,而不是仅仅复制'/ categories /'(DRY和所有那)。所以,我有:

<*>

当我运行测试时,我得到 NoReverseMatch 错误:

<*>

如果我将URL模式设为命名模式,它就匹配得很好,如下所示:

<*>

并使用模式名称来匹配它:

<*>

但据我所知,从 reverse 文档,我不应该只是使用 reverse 使其成为命名的URL模式。

任何想法我做错了什么?

, views.categories, 'myapp-categories')

并使用模式名称来匹配它:

<*>

但据我所知,从 reverse 文档,我不应该只是使用 reverse 使其成为命名的URL模式。

任何想法我做错了什么?

, views.categories)

categories myapp / views.py 中的一个视图函数。没有其他URLconf行引用 views.categories

在单元测试文件中,我试图使用 django.core.urlresolvers.reverse()来获取此URL,而不是仅仅复制'/ categories /'(DRY和所有那)。所以,我有:

<*>

当我运行测试时,我得到 NoReverseMatch 错误:

<*>

如果我将URL模式设为命名模式,它就匹配得很好,如下所示:

<*>

并使用模式名称来匹配它:

<*>

但据我所知,从 reverse 文档,我不应该只是使用 reverse 使其成为命名的URL模式。

任何想法我做错了什么?

有帮助吗?

解决方案 2

经过进一步的调查后发现,这是我导入视图模块的一个问题:

如何顺利通过Django&#8217;反向()函数的函数引用?

感谢你的帮助,伙计们:你激励我正确看待它。

其他提示

Jack M.的例子几乎是正确的。

如果你想使用命名网址,它必须是一个网址功能,而不是一个元组。

url(r'^no_monkeys/, 'views.noMonkeys', {}, "no-monkeys"),

这确实有效,并且您粘贴的所有代码都是正确的并且工作正常(我只是将其复制到一个干净的测试/项目应用程序中,并且它没有任何问题地反转了URL)。所以这里还有其他事情你没有向我们展示过。简化到简单的基础,直到它工作,然后开始增加复杂性,看看它在哪里破碎。

另外,你可以做“./ manage.py shell”。然后以交互方式导入反向函数和视图函数,然后反过来。这将删除测试设置作为可能的原因。

反向函数实际上使用“名称”和“名称”。的URL。这个定义如下:

urlpatterns = patterns('',
    (r'^no_monkeys/

现在你要用字符串“no-monkeys”调用reverse。得到正确的网址。

Ninja编辑:这是一个链接关于这个主题的django文档。

, 'views.noMonkeys', {}, "no-monkeys"), (r'^admin/(.*)', admin.site.root), )

现在你要用字符串“no-monkeys”调用reverse。得到正确的网址。

Ninja编辑:这是一个链接关于这个主题的django文档。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top