连接Django设置“MIDDLEWARE_CLASSES”

时间:2011-11-25 06:03:36

标签: django django-middleware django-settings

我想使用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设置吗?

1 个答案:

答案 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修订版之间可能会发生什么变化!