覆盖/添加设置中的Django URL而不是URL
似乎最新的Django调试工具栏模块现在已经改为中间件,需要显式URL设置才能工作。在我的Django项目中,我总是尝试根据环境组织设置,而不是将if settings.DEBUG散落在设置文件和项目中 我的设置布局是一个常规布局: 在Django 1.10中,有没有一种方法可以添加到development.py文件中的URL,这样我就可以避开if settings.DEBUG。或者如果我们想使用新版本的调试工具栏,我们会被迫使用这种方法吗 我只是觉得下面的有点反模式覆盖/添加设置中的Django URL而不是URL,django,django-debug-toolbar,Django,Django Debug Toolbar,似乎最新的Django调试工具栏模块现在已经改为中间件,需要显式URL设置才能工作。在我的Django项目中,我总是尝试根据环境组织设置,而不是将if settings.DEBUG散落在设置文件和项目中 我的设置布局是一个常规布局: 在Django 1.10中,有没有一种方法可以添加到development.py文件中的URL,这样我就可以避开if settings.DEBUG。或者如果我们想使用新版本的调试工具栏,我们会被迫使用这种方法吗 我只是觉得下面的有点反模式 如果不想在URL配置中测试
如果不想在URL配置中测试settings.DEBUG的值,则可以使用与用于设置的模式类似的模式来管理URL 您将拥有具有以下结构的URL包,而不是URL.py文件:
urls
├── __init__.py
├── common.py
├── local.py
└── production.py
在不同的设置文件中,您可以指定以这种方式使用哪个URL conf文件:
# settings/local.py
ROOT_URLCONF = 'urls.local'
URL/common.py文件将公开一个urlpattern成员,其中包含所有配置所共有的URL模式,您将在URL/local.py和URL/production.py中导入和使用这些配置
例如:
# urls/common.py
urlpatterns = [
# Put all common URL patterns here
]
如果你想听听我的意见,这个解决方案感觉有些过头了,因为与设置相比,URL配置在不同的环境中应该没有太大差异。奇怪的是,我一开始没有想到这一点,尽管我是为设置而做的。啊!但是你的方法看起来确实是一个合理的选择。谢谢这是一个不错的解决方案,谢谢!关于模块名的一个警告。我将Python3.6与Django 1.11一起使用,结果表明它需要绝对模块路径,而不是相对根路径_URLCONF={{project_name}}.url',因此需要在设置文件中包含project_name,例如“xxx.url.local”
# settings/local.py
ROOT_URLCONF = 'urls.local'
# settings/production.py
ROOT_URLCONF = 'urls.production'
# urls/common.py
urlpatterns = [
# Put all common URL patterns here
]
# urls/local.py
from .common.py import urlpatterns as common_urlpatterns
urlpatterns = common_urlpatterns + [
url(r'^__debug__/', include(debug_toolbar.urls)),
]