【发布时间】:2013-11-09 19:40:18
【问题描述】:
我有一个 Django 项目,training 和这个项目中的一个应用程序,tests。文件夹结构如下所示:
django-training
tests
urls.py
training
urls.py
在training/urls.py 里面我定义了这个模式:
url(r'^tests/', include('tests.urls', namespace='tests'))
在tests/urls.py 内部我定义了这些模式:
url(r'^$', index, name='index'),
url(r'^(\d+)/$', view, name='view'),
url(r'^give-up/$', give_up, name='give_up'),
url(r'^(\d+)/result/$', result, name='result')
一切正常。
但是,如果我想将 tests 应用程序打包为可在任何 Django 项目中运行的可重用应用程序怎么办?我应该如何处理 URL 模式?
我创建了一个tests/settings.py 文件并将ROOT_URLCONF 配置变量更改为指向tests/urls.py。但这不起作用,因为会出现此错误:
Traceback (most recent call last):
File "/home/user/.virtualenvs/clean2/local/lib/python2.7/site-packages/tests/tests.py", line 173, in testContext
response = self.client.get(reverse('tests:view', args=(1,)))
File "/home/user/.virtualenvs/clean2/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 492, in reverse
key)
NoReverseMatch: u'tests' is not a registered namespace
这个错误很符合逻辑,因为reverse 需要定义命名空间(即tests)。
我的问题是:我应该如何以及在哪里为可重用应用程序定义这个命名空间,以便 URL 可以独立于安装应用程序的 Django 项目工作?
【问题讨论】:
-
我们可以看看你的反向函数调用吗?
-
@GamesBrainiac 我已经添加了错误的完整回溯,包括函数调用。
标签: python django namespaces urlconf