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 时如何导入设置?

Djang DJANGO_SETTINGS_MODULE

DJANGO_SETTINGS_MODULE 未命名模块

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

Django“未配置设置”错误,无法定义环境变量 DJANGO_SETTINGS_MODULE

django.setup(): ModuleNotFoundError: 设置 DJANGO_SETTINGS_MODULE 时没有名为“api.apps”的模块