【发布时间】:2018-03-10 09:47:50
【问题描述】:
在我的 Django 项目的 urlconf 中,我有这样的内容:
from django.conf import settings
from django.conf.urls import include, url
urlpatterns = [
url(r'^{}/blog'.format(settings.MY_ROOT_DIR),
include('weblogs.urls')),
# ...
]
在我的settings.py 中,我会有类似的内容:
MY_ROOT_DIR = 'phil'
这样我就可以在一个地方(设置)设置在多个地方使用的根目录。
当我来测试网址时,我使用@override_settings decorator:
from django.test import TestCase, override_settings
from django.urls import reverse
@override_settings(MY_ROOT_DIR='terry')
class WeblogUrlsTestCase(TestCase):
def test_post_detail_url(self):
self.assertEqual(
reverse('post_detail', kwargs={'slug': 'my-post'}),
'/terry/blog/my-post/'
)
但是,@override_settings 似乎没有做任何事情 - urls.py 中使用的 MY_ROOT_DIR 值始终是 "phil",而不是 "terry" 的覆盖设置。我也试过@modify_settings,并在测试方法上使用它,而不是在类上。
我猜 urlconf 是在 @override_settings 生效之前由 Django 加载的?有没有解决的办法?还是完全有更好的解决方案?
【问题讨论】:
标签: django django-urls django-testing django-settings