2

我想使用 导入 django 默认设置,from django.conf import global_settings然后添加MIDDLEWARE_CLASSES到它。我喜欢用我的设置来做这件事,这样我就知道我添加了什么以及什么是默认的。所以我的设置文件看起来像这样:

from django.conf import global_settings
...
global_settings.MIDDLEWARE_CLASSES += (
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    )

此策略适用于其他设置,例如TEMPLATE_CONTEXT_PROCESSORS,但当我尝试时,它不起作用。我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 设置吗?

4

1 回答 1

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 版本之间会发生什么变化!

于 2011-11-25T06:34:44.410 回答