我正在尝试为遵循Heroku推荐结构的Django应用程序创建一个目录结构,如page底部所示。如您所见,他们创建了一个“设置”目录,其中包含根据项目部署到哪个层而读取的各个设置文件(例如dev.py)。
现在我原本期望会有一个“settings.py”文件与设置目录处于同一级别,该目录将从settings目录中的某个设置文件导入。但是,他们的图表不会显示任何此类“settings.py”文件,只显示目录。如何在没有顶级settings.py文件的情况下执行相应的设置文件?
就像一个实验一样,我创建了一个settings.py文件,该文件与settings目录位于同一级别。问题是,当我执行“runserver”时,设置目录中的 init .py文件会导致错误:“'设置'对象没有'ROOT_URLCONF'”我猜是有某种排序名称冲突,因为如果我将设置目录的名称更改为“conf”,我不会收到此错误。
Heroku人可以假设用户正在某处设置DJANGO_SETTINGS_MODULE吗?如果没有,他们如何阅读正确的设置文件?
感谢。
答案 0 :(得分:1)
当python是名为settings
的导入模块时,它会查找名为settings.py
的文件或名为settings
的目录(python模块),其中包含__init__.py
。这就是python模块系统的工作原理。
从那里,您可以决定在init文件中导入哪个设置文件,从prod
或dev
等内容导入内容。我想这应该在某个地方的那个页面上解释,但我一眼就看不到它。
至于Heroku,它不会假设任何东西,并且使用django默认值。因此正在导入模块settings
。
另外,我不反对在项目仓库中使用dev / prod设置,但heroku为您提供了一种使用ENV变量动态更改配置的非常好的方法。你可以在他们的(非常好的)django tutorial上找到更多信息。