我migrating a Google App Engine application from Django 0.96 to 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
不再导入。在GAE的SDK中挖掘了一下,我注意到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()
然而,手动调用私有函数感觉很奇怪/错误...为什么我的自定义设置文件不再导入?
答案 0 :(得分:2)
对here发生的事情有一个很好的解释:
Django设置是从 指定settings.py懒洋洋地, 他们第一次被访问。该 问题是导入 webapp.template调用 django.conf.settings.configure()来 尝试设置一些设置。 因此,如果是webapp.template 在任何设置之前导入 访问,然后settings.py永远不会 已加载(如设置访问者找到的那样) 该设置已经存在,并且 不再尝试加载。)
解决这个问题的方法就是强迫一个人 访问设置,加载 settings.py,在webapp.template之前 进口。然后当webapp.template是 后来进口,它的召唤 django.conf.settings.configure()是 忽略。
对我来说听起来像个错误。您可以将其提交给the issue tracker。