2011-11-25 30 views
2

我想导入django默认设置,使用from django.conf import global_settings,然后将MIDDLEWARE_CLASSES添加到它。我喜欢用我的设置来做到这一点,以便我知道我已添加的内容以及默认设置。所以,我的设置文件应该是这样的:连接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设置?

回答

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

+0

我同意重新排列。我认为将它们全部列出会更好。 –