DJANGO_SETTINGS_MODULE - 未加载指定的设置文件?
Posted
技术标签:
【中文标题】DJANGO_SETTINGS_MODULE - 未加载指定的设置文件?【英文标题】:DJANGO_SETTINGS_MODULE -specified settings file not loaded? 【发布时间】:2011-08-16 06:43:24 【问题描述】:我是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】:对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。
【讨论】:
确实,在导入 webapp 之前移动设置导入解决了这个问题。我会打开一个问题来报告这个。谢谢。以上是关于DJANGO_SETTINGS_MODULE - 未加载指定的设置文件?的主要内容,如果未能解决你的问题,请参考以下文章
使用 DJANGO_SETTINGS_MODULE 时如何导入设置?
DJANGO_SETTINGS_MODULE - 未加载指定的设置文件?
Django“未配置设置”错误,无法定义环境变量 DJANGO_SETTINGS_MODULE
django.setup(): ModuleNotFoundError: 设置 DJANGO_SETTINGS_MODULE 时没有名为“api.apps”的模块