我知道这个问题已被多次询问,但我似乎仍无法找到适合我的解决方案。我的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
是指向正确设置文件的符号链接,我的计算机上为dev.py
,生产中为prod.py
。
这是我的问题:当我尝试使用manage.py时,我得到一个奇怪的错误ImproperlyConfigured: The SECRET_KEY setting must not be empty.
当我将路径传递给设置文件local.py作为参数(--settings=core.settings.local
)时,它运行精细。我认为问题是Django不知道在哪里寻找设置文件。我怎么能告诉他(她?)在哪里看?
我已经尝试将路径导出到env(export DJANGO_SETTINGS_MODULE=core.settings.local
)并将PYTHONPATH
设置为父目录,但无济于事。
答案 0 :(得分:2)
__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
总而言之,当你在一个包mypackage中调用__init__.py
中的import时,就像你使用package作为一个简单的python文件一样,这就是我的解决方案所做的:
from .local import *
中的 __init__.py
我之前在设置案例中没有使用它,但是当我想在Django应用程序中细分我的模型时使用它,models.py
- >模型包,./manage syndb
没有发现我宣布的模型,我发现这个解决方案类似。您可以找到更多详细信息here
最后,我确定还有其他问题的解决方案,但这可能是最简单的。
祝你好运答案 1 :(得分:0)
你在某个地方进口地狱。有这个问题太一次了。找出问题根源的唯一方法可能是禁用所有应用,尝试启动服务器,启用第一个应用,启动服务器,启用下一个应用等。
BTW:不应该从Django 1.4开始使用你的项目布局。 https://docs.djangoproject.com/en/dev/releases/1.4/#updated-default-project-layout-and-manage-py
我尝试使用新的布局并希望它“正常”。
答案 2 :(得分:0)
我认为您需要更改manage.py正在查找的文件的名称。
try:
imp.find_module('settings') # Assumed to be in the same directory.
except ImportError:
import sys
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
sys.exit(1)
如果你在同一目录中有settings.py文件,那么简单地将'settings'更改为'local'就行了。
但是,由于您将它放在不同的目录中,我认为您需要配置设置。请参阅:https://docs.djangoproject.com/en/dev/topics/settings/#using-settings-without-setting-django-settings-module
from django.conf import settings
settings.configure(DEBUG=True, TEMPLATE_DEBUG=True,
TEMPLATE_DIRS=('/home/web-apps/myapp', '/home/web-apps/base'))
希望有所帮助。