首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串联Django设置"MIDDLEWARE_CLASSES“

串联Django设置"MIDDLEWARE_CLASSES“
EN

Stack Overflow用户
提问于 2011-11-25 14:03:36
回答 1查看 2K关注 0票数 2

我想使用from django.conf import global_settings导入django默认设置,然后将MIDDLEWARE_CLASSES添加到其中。我喜欢用我的设置这样做,这样我就知道我添加了什么和默认的是什么。因此,我的设置文件将如下所示:

代码语言:javascript
复制
from django.conf import global_settings
...
global_settings.MIDDLEWARE_CLASSES += (
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    )

此策略适用于其他设置,如TEMPLATE_CONTEXT_PROCESSORS,但当我尝试它时,它不起作用。我在添加调试工具栏中间件之后添加了print global_settings.MIDDLEWARE_CLASSES,这是我使用runserver时的输出

代码语言:javascript
复制
('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设置的好理由吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-25 14:34:44

我不建议您直接更改global_settings变量。Django核心在合并您在settings.py中定义的所有内容时做了大量的工作,因此您的更改可能会被覆盖。

如果您确实希望直接从global_settings派生变量,我会创建一个本地副本,然后对其进行修改。示例:

代码语言:javascript
复制
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版本之间会发生什么变化!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8265312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档