我知道这个问题已经被问过多次,但我似乎仍然找不到适合我的解决方案。我的 Django 项目文件夹如下所示:
my_project
__init__.py
manage.py
my_first_app
my_second_app
core
现在“core”文件夹如下所示:
__init__.py
some_other_stuff.py
settings
__init__.py
prod.py
dev.py
local.py -> dev.py
local.py
是一个符号链接(symbolic link),指向正确的设置文件,在我的机器上为 dev.py
,在生产中为 prod.py
.
这是我的问题:当我尝试使用manage.py时,我收到一个奇怪的错误ImproperlyConfigured:The SECRET_KEY设置不能为空。
当我将路径传递给设置文件local.py时作为参数(--settings=core.settings.local
)它运行良好。我认为问题是 Django 不知道在哪里查找设置文件。我怎样才能告诉他(她?)去哪里看?
我已经尝试将路径导出到环境 (export DJANGO_SETTINGS_MODULE=core.settings.local
) 并将 PYTHONPATH
设置为父目录,但无济于事。
最佳答案
__init__.py
的主要用途是初始化Python包。演示这一点的最简单方法是查看标准 Python 模块的结构。
package/
__init__.py
file1.py
file2.py
正如您在上面的结构中看到的,包含 __init__.py
目录中的文件向 Python 解释器指示该目录应被视为 Python 包
__init__.py
可以是一个空文件,但它通常用于执行包所需的设置(导入内容、将内容加载到路径中等)。
在 __init__.py
中要做的一件常见的事情是将选定的类、函数等导入到包级别,以便可以方便地从包中导入它们。
在上面的示例中,我们可以说 file.py 具有类文件。所以我们的 __init__.py
中没有任何内容您可以使用以下语法导入:
from package.file import File
但是您可以将文件导入到您的 __init__.py
中使其在包级别可用:
# in your __init__.py
from file1 import File
# now import File from package
from package import File
因此,作为结论,当您在 __init__.py
中调用 import 时在包 mypackage 中,就像将包用作简单的 python 文件一样,这就是我的解决方案所做的:
from .local import *
在__init__.py
我之前没有在设置案例中使用过它,但当我想在 Django 应用程序中分割我的模型时,我会使用它,models.py
--> 模型包,./manage syndb
没有发现我声明的模型,我发现这个解决方案是相似的。您可以查看更多详情here
最后一件事,我确信还有其他解决方案可以解决您的问题,但这可能是最简单的。
祝你好运
关于Django:如何指定设置文件的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17364863/