如何为Django设置交替目录结构?

1 投票
3 回答
506 浏览
提问于 2025-04-17 05:59

我正在开始我的第一个大型 Django 项目,发现默认的文件夹结构不太适合我的需求。

我看到这个问题和答案,决定尝试实现类似的结构。大型 Django 应用布局

我需要做些什么才能让这样的结构工作?我该如何改变 Django 查找应用和模块的地方?

3 个回答

1

如果你在你的设置文件 .py 里加上:

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

然后在你的 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',
)  

这样做可以让你更灵活地移动应用,而不需要重新声明导入等内容。

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 来安装应用,这样我就可以根据每台服务器来控制部署,并且每台服务器上运行的多个项目都可以访问这些应用。你可以在这里了解有关 distutils 安装脚本 的更多信息。然后,安装时你只需要:

./setup.py install
1

Python可以自动处理很深的文件夹结构。这可能就是你找不到相关操作说明的原因。下面是一些关于如何让类和模型正常工作的说明。

如果你想在文件夹 yourproject/apps/firstapp 中创建一个模块,你只需要在INSTALLED_APPS中添加一行 'apps.firstapp',。同时,你需要在每个目录下添加一个 __init__.py 文件,这样它们才能被识别为Python包。

当你导入类的时候,可以直接使用 from yourproject.apps.firstapp.filename import yourclass

你还需要确保所有的模板目录都在 TEMPLATE_DIRS 中列出。

撰写回答