Python 如何为django设置和替换目录结构?

Python 如何为django设置和替换目录结构?,python,django,Python,Django,我正在开始我的第一个大型django项目,并且已经意识到默认目录结构不会很好地工作 我看到了这个问题和答案,决定实施类似的东西。 我需要做些什么才能让这样的事情成功?如何更改django查找应用程序/模块的位置?我有两种方法来处理这个问题;一个用于生产,一个用于开发 正在开发中: 将路径附加到设置.py中的应用程序。就我而言,我的主要项目在~/hg/django/project/中,我的应用程序在~/hg/django/apps/中。因此,我使用: if DEVEL: sys.path

我正在开始我的第一个大型django项目,并且已经意识到默认目录结构不会很好地工作

我看到了这个问题和答案,决定实施类似的东西。


我需要做些什么才能让这样的事情成功?如何更改django查找应用程序/模块的位置?

我有两种方法来处理这个问题;一个用于生产,一个用于开发

正在开发中:
将路径附加到
设置.py中的应用程序。就我而言,我的主要项目在
~/hg/django/project/
中,我的应用程序在
~/hg/django/apps/
中。因此,我使用:

if DEVEL:
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'apps'))
我还在我的开发盒上使用生产方法。这种方法有一种连锁反应,只需在
settings.py
中注释行路径插入,就可以让我回滚到最新的生产版本

正在生产中:
我使用
distutils
安装应用程序,这样我可以控制每台服务器的部署,并且在每台服务器上运行的多个项目都可以访问它们。你可以在这里读到。然后,要安装,只需执行以下操作:

./setup.py install

Python会自动使用深层目录结构。很遗憾,您没有找到任何关于如何操作的说明。下面是一些关于如何使类和模型工作的说明

如果您想在文件夹
yourproject/apps/firstapp
中拥有一个模块,您可以通过添加行
'apps.firstapp',
将其添加到已安装的应用程序中。您必须向每个目录添加一个
\uuuu init\uuuu.py
文件,以便将它们识别为python包

导入类时,只需从yourproject.apps.firstapp.filename使用
,即可导入类

如果添加以下内容,还应确保所有模板目录都列在
template\u DIRS

中:

import os
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
添加到settings.py,并将以下内容添加到manage.py:

sys.path.insert(0, join(settings.PROJECT_ROOT, "apps"))
sys.path.insert(0, join(settings.PROJECT_ROOT, "lib"))
然后,您可以像在项目根目录中一样将它们包含在已安装的应用程序中:

INSTALLED_APPS = (
    #local apps
    'myapp',

    #local libs
    'piston_dev',
)  

这使您可以更自由地移动应用程序,而无需重新声明导入之类的内容。

这对我不适用吗?我刚刚得到一个错误:没有名为dir.app的模块。包含的文件夹也需要是一个应用程序吗?忘了提及。您应该将空的
\uuuuu init\uuuuuu.py
文件添加到文件夹中,以便python将其识别为一个模块。这似乎适用于runserver,但当我使用apache和wsgi时,会出现未找到的错误。Ryans的解决方案很有效,但在处理设置之外的应用程序时,这似乎有问题。py另一个好答案,但Lycha的现在实现起来更简单。