1

我正在尝试为遵循 Heroku 推荐结构的 Django 应用程序创建目录结构,如本页底部所示。如您所见,他们创建了一个“设置”目录,其中包含各个设置文件(例如 dev.py),这些文件的读取取决于项目部署到的层。

现在我本来希望会有一个与设置目录相同级别的“settings.py”文件,该文件将从设置目录中的设置文件之一导入。但是,他们的图表没有显示任何这样的“settings.py”文件,只是目录。他们如何在没有顶级 settings.py 文件的情况下执行适当的设置文件?

作为一个实验,我创建了一个与设置目录位于同一级别的 settings.py 文件。问题是,当我执行“runserver”时,设置目录中的init .py 文件会导致错误:“'Settings' 对象没有 'ROOT_URLCONF'” 我猜会有某种名称冲突,因为如果我更改将设置目录的名称设置为“conf”我没有收到此错误。

Heroku 的人是否会假设用户正在某处设置 DJANGO_SETTINGS_MODULE?如果不是,他们如何读取正确的设置文件?

谢谢。

4

1 回答 1

1

当 python 被调用导入模块settings时,它会查找被调用的文件或被调用并包含在其中settings.py的目录(python 模块)。这就是 python 模块系统的工作原理。settings__init__.py

从那里,您可以决定在您的初始化文件中导入哪个设置文件,从内部导入东西,如proddev. 我想这应该在那个页面的某个地方进行解释,但我一目了然。

至于 Heroku,它不假设任何东西,并且使用 django 默认值。所以模块settings正在被导入。

另外,我不会反对在你的项目仓库中使用 dev/prod 设置,但是 heroku 为你提供了一种非常好的方法来使用 ENV 变量动态更改配置。您可以在他们的(非常好的) django 教程中找到更多信息。

于 2012-09-03T03:45:39.797 回答