我想使用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,但当我尝试它时,它不起作用。我在添加调试工具栏中间件之后添加了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设置的好理由吗?
发布于 2011-11-25 14:34:44
我不建议您直接更改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版本之间会发生什么变化!
https://stackoverflow.com/questions/8265312
复制相似问题