2013-06-28 28 views
2

我知道这个问题已被多次询问,但我仍然无法找到适合我的解决方案。我的Django项目文件夹看起来是这样的: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.当我将路径传递给设置文件local.py作为参数(--settings=core.settings.local)时,它运行正常。我认为问题在于Django不知道在哪里寻找设置文件。我怎么能告诉他(她?)在哪里看?

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

+2

试试这个:'''来自进口。当地*'''在'''__init __ py''' – Mounir

+2

@Mounir我刚刚我......我无语了。怎么样?为什么?你是一个巫师吗?发布这个答案,解释它的工作原理(如果你知道的话),我会接受它。 –

回答

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 

Source

所以对于结论是,当你在包mypackage中调用__init__.py导入时,它就像使用包作为简单的python文件一样,这就是我的解决方案所做的:

from .local import *__init__.py

我没有在设置的情况下,前使用此功能,但我用它当我想以我的细分车型的Django应用程序,models.py - >模型包,./manage syndb不会发现我的模型宣布,我发现这样的解决方案是相似的。你可以找到更多的细节here

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

好运

+0

感谢您的所有细节!干杯。 –

0

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

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

我会尝试使用新的布局,并希望它'正常工作'。

+0

我们会尝试改变布局(毕竟这是正确的布局)。与此同时,@Mounir的咒语似乎完成了工作。 –

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')) 

希望有所帮助。