在我的Django项目的URL配置我有这样的事情:在测试过程中,如何覆盖urlconf中使用的Django设置?
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是由Django加载之前@override_settings
生效?有没有解决的办法?或者更好的解决方案?
啊,当然。我已经有一个单独的设置文件进行测试,但由于某种原因没有想到使用它!我的大脑今天一定很累:)谢谢! –
@PhilGyford请标记为正确答案,如果它帮助:) – hspandher
我不得不再等五分钟才能让我! –