DJANGO_SETTINGS_MODULE - 未加载指定的设置文件?

时间:2011-05-01 00:50:55

标签: django google-app-engine django-settings django-1.2

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()

然而,手动调用私有函数感觉很奇怪/错误...为什么我的自定义设置文件不再导入?

1 个答案:

答案 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