Конкатенация настроек Django "MIDDLEWARE_CLASSES" - PullRequest
2 голосов
/ 25 ноября 2011

Я хочу импортировать настройки по умолчанию для 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 после добавления Middlware панели отладки, и это был мой вывод при использовании 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 по умолчанию?

1 Ответ

2 голосов
/ 25 ноября 2011

Не думаю, что рекомендуется вносить изменения непосредственно в переменную 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!

...