2

我知道这个问题已经被问过多次,但我似乎仍然找不到适合我的解决方案。我的 Django 项目文件夹如下所示:

my_project
    __init__.py
    manage.py
    my_first_app
    my_second_app
    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.当我将路径作为参数 ( --settings=core.settings.local) 传递给设置文件 local.py 时,它运行良好。我认为问题在于 Django 不知道在哪里查找设置文件。我怎样才能告诉他(她?)去哪里看?

我已经尝试将路径导出到 env ( export DJANGO_SETTINGS_MODULE=core.settings.local) 并将其设置PYTHONPATH为父目录,但无济于事。

4

3 回答 3

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

但是,您可以将 File 导入到您的文件__init__.py中,以使其在包级别可用:

# in your __init__.py
from file1 import File
# now import File from package
from package import File

来源

因此,总而言之,当您__init__.py在包 mypackage 中调用 import 时,就像您将包用作简单的 python 文件一样,这就是我的解决方案所做的:

from .local import *__init__.py

我以前没有在设置案例中使用过它,但是当我想在 Django 应用程序中细分我的模型时使用它,models.py--> 模型包,./manage syndb没有发现我声明的模型,我发现这个解决方案是相似的。您可以在此处找到更多详细信息

最后一件事,我确定您的问题还有其他解决方案,但这可能是最简单的。

祝你好运

于 2013-06-28T23:19:10.987 回答
0

你在某个地方的进口地狱。曾经也遇到过这个问题。找出问题根源的唯一方法可能是禁用所有应用程序,尝试启动服务器,启用第一个应用程序,启动服务器,启用下一个等。

顺便说一句:你的项目布局不应该从 Django 1.4 开始使用。https://docs.djangoproject.com/en/dev/releases/1.4/#updated-default-project-layout-and-manage-py

我会尝试使用新布局并希望它“正常工作”。

于 2013-06-28T12:55:48.063 回答
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 文件,只需将“设置”更改为“本地”即可。

但是,由于您将它放在不同的目录中,我认为您需要配置设置。参考这个: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'))

希望有帮助。

于 2013-06-28T14:36:09.413 回答