DJANGO_SETTINGS_MODULE - указанный файл настроек не загружен?
Я перевожу приложение 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, я заметил, что версии 0.96 и 1.2 google_appengine/lib/django_<VERS>/django/conf/__init__.py
файл работает по другому.
В 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 ответ
Есть хорошее объяснение того, что здесь происходит:
Настройки Django загружаются из указанного файла settings.py лениво, при первом обращении к ним. Проблема в том, что при импорте webapp.template вызывается django.conf.settings.configure(), чтобы попытаться установить некоторые настройки. Поэтому, если файл webapp.template импортируется до того, как к каким-либо настройкам обращаются, то файл settings.py никогда не загружается (так как средство доступа к настройкам обнаруживает, что настройки уже существуют, и больше не пытается загружаться)
Решением этой проблемы является принудительный доступ к настройкам, чтобы загрузить файл settings.py до импорта webapp.template. Затем, когда webapp.template позднее импортируется, его вызов django.conf.settings.configure() игнорируется.
Похоже, ошибка для меня. Вы можете отправить его на трекер.