DJANGO_SETTINGS_MODULE - указанный файл настроек не загружен? - PullRequest
2 голосов
/ 01 мая 2011

Я переношу приложение Google App Engine с Django 0,96 на 1,2 .В процессе я заметил, что файл настроек, указанный в моем главном обработчике, больше не загружался (вместо 3-х указанных языков Django загрузил полный список языков по умолчанию из своего файла django/conf/global_settings.py).

В 0.96 я указал файл следующим образом:

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'conf.settings'

Из того, что я прочитал в документации, это не должно изменяться.Тем не менее, при указании версии 1.2, как это:

from google.appengine.dist import use_library
use_library('django', '1.2')

conf.settings больше не импортируется.Копаясь в SDK GAE, я заметил, что версии файла google_appengine/lib/django_<VERS>/django/conf/__init__.py 0.96 и 1.2 работают по-разному.

В 0.96 LazySettings._import_settings вызывается из LazySettings.__getattr__, что приводит к указанному файлув os.environ['DJANGO_SETTINGS_MODULE'] для импорта.

В 1.2, LazySettings._setup, кажется, нигде не вызывается.

Если я добавлю ручной вызов к settings._setup() в моем главном обработчике,файл пользовательских настроек импортируется правильно.Например:

from django.conf import settings
settings._target = None # Force Django to reload settings
settings._setup()

Однако, кажется странным / неправильным вызывать эту частную функцию вручную ... Почему мой файл пользовательских настроек больше не импортируется?

1 Ответ

2 голосов
/ 01 мая 2011

Хорошее объяснение того, что происходит здесь :

Настройки Django загружаются из указанного файла settings.py лениво, при первом обращении к ним.Проблема в том, что при импорте webapp.template вызывается django.conf.settings.configure (), чтобы попытаться установить некоторые настройки.Поэтому, если файл webapp.template импортируется до того, как к ним обращаются к каким-либо настройкам, никогда не загружается файл settings.py (поскольку средство доступа к настройкам обнаруживает, что настройки уже существуют, и больше не пытается загрузить).это означает принудительный доступ к настройкам, чтобы загрузить файл settings.py до импорта webapp.template.Затем, когда webapp.template позднее импортируется, его вызов django.conf.settings.configure () игнорируется.

Для меня это звучит как ошибка.Вы можете отправить его в систему отслеживания проблем .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...