我有一个 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 项目工作?