6

我正在编写调用django.core.urlresolvers.reverse()生成链接的便捷代码。但是,我似乎无法编写一个简单的URLconf来进行快速测试。

这是我尝试过的:

>>> from django.conf.urls import patterns, url
>>> conf = patterns('', url(r'^foo/$', lambda request: None, name='foo'))
>>> from django.core.urlresolvers import reverse
>>> reverse('foo', conf)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File ".../env/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 445, in reverse
    resolver = get_resolver(urlconf)
File ".../env/local/lib/python2.7/site-packages/django/utils/functional.py", line 27, in wrapper
    if mem_args in cache:
TypeError: unhashable type: 'list'

我在 Python 2.7 上使用 Django 1.5。

4

2 回答 2

5

我会考虑创建一个test_urls.py模块

from django.conf.urls import patterns, include, url

urlpatterns = patterns('', url(r'^foo/$', lambda request: None, name='foo'))

test_urls.py然后在您调用reverse测试时给出路径。

reverse('foo', 'path.to.test_urls')

如果你真的想urlconf在你的测试中创建,你需要确保它有一个urlpatterns属性。以下适用于 Django 1.4。

from django.conf.urls import patterns, url
from django.core.urlresolvers import reverse

class MockUrlConf(object):
    urlpatterns = patterns('', url(r'^foo/$', lambda request: None, name='foo'))

reverse('foo', MockUrlConf)
于 2013-06-18T15:49:49.777 回答
2

reverse方法的urlconf参数是一个字符串,指示包含urls. 你可以这样称呼它:

reverse('foo', 'your_app.urls' )

现在,我不知道如何准确地改变这种行为,您可以创建一些urls.py用于测试和调用它们,但这似乎与您的settings.py.

该文档不是很有用,它说基本上您不需要设置urlconfparam。所以我会听它并尝试另一种方式。

祝你好运!

于 2013-06-18T15:49:02.067 回答