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

时间:2011-11-09 22:01:38

标签: python django

我正在开始我的第一个大型django项目,并意识到默认目录结构不能正常工作。

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

我需要做些什么来做这样的工作?如何更改django查找应用程序/模块的位置?

3 个答案:

答案 0 :(得分:1)

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

在发展中:
settings.py中添加应用的路径。就我而言,我的主项目位于~/hg/django/project/,我的应用程序位于~/hg/django/apps/。所以我用:

if DEVEL:
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'apps'))

我也在我的开发盒上使用了制作方法。通过简单地在settings.py中注释掉行路径插入,这种方法可以让我回滚到最新的生产版本。

在制作中:
我使用distutils安装应用程序,以便我可以控制每台服务器的部署,并且每台服务器上运行的多个项目都可以访问它们。你可以在这里阅读the distutils setup scripts。然后,要安装,您只需:

./setup.py install

答案 1 :(得分:1)

Python使用深层目录结构自动运行。你可能没有找到任何关于如何操作的说明。这里有关于如何使类和模型工作的一些说明。

如果您想在文件夹yourproject/apps/firstapp中安装模块,可以通过添加行'apps.firstapp',将其添加到INSTALLED_APPS。您必须在每个目录中添加__init__.py文件,以便将它们识别为python包。

导入课程时,您只需使用from yourproject.apps.firstapp.filename import yourclass

您还应确保所有模板目录都列在TEMPLATE_DIRS

答案 2 :(得分:1)

如果你添加:

import os
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))

将您的设置.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',
)  

这使您可以更自由地移动应用程序而无需重新声明导入等。