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() игнорируется.

Похоже, ошибка для меня. Вы можете отправить его на трекер.

Другие вопросы по тегам