我想使用from django.conf import global_settings
导入django默认设置,然后将MIDDLEWARE_CLASSES
添加到其中。我喜欢用我的设置执行此操作,以便我知道我添加了什么以及默认设置。所以我的设置文件看起来像这样:
from django.conf import global_settings
...
global_settings.MIDDLEWARE_CLASSES += (
'debug_toolbar.middleware.DebugToolbarMiddleware',
)
此策略适用于其他设置,例如TEMPLATE_CONTEXT_PROCESSORS
,但是当我尝试它时,它无效。我在添加调试工具栏Middlware后添加了print global_settings.MIDDLEWARE_CLASSES
,这是我使用runserver
时的输出
('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware')
('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware')
Validating models...
0 errors found
Django version 1.3.1, using settings 'canada.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
如果您滚动,可以看到它在设置中运行两次。第二次再次添加设置。我怎么能阻止这个?我必须在设置中对MIDDLEWARE_CLASSES
进行硬编码吗?还有一个很好的理由不导入默认的django设置吗?
答案 0 :(得分:2)
我认为不建议您直接对global_settings变量进行更改。 Django核心做了大量工作,因为它合并了你在settings.py中定义的所有内容,所以可能是你的更改被覆盖了。
如果你真的想直接从global_settings派生你的变量,我会制作一个本地副本,然后修改它。例如:
GLOBAL_MIDDLEWARE_CLASSES = global_settings.MIDDLEWARE_CLASSES
LOCAL_MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware',)
MIDDLEWARE_CLASSES = GLOBAL_MIDDLEWARE_CLASSES + LOCAL_MIDDLEWARE_CLASSES
Django应该接着你已经定义了一个新版本的MIDDLEWARE_CLASSES,并使用正确的过程将其插入到global_middleware中。
话虽如此,我个人更愿意在那里找到所有中间件课程,以便在需要时查看和重新安排。通过使用您选择的方法,您不知道Django修订版之间可能会发生什么变化!