2011-11-25 34 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

我同意重新排列。我認爲將它們全部列出會更好。 –