Django子应用程序和模块结构

Rob*_*ing 18 python django django-apps

我正在开发一个Django应用程序,这是一个需要多个子应用程序来保持整洁的大型系统.因此,我有一个顶级目录,它是一个Django应用程序(因为它有一个空models.py文件),以及多个子目录,它们本身也是应用程序.

我以这种方式放置我的应用程序的原因是因为子应用程序是分开的,但它们永远不会在父应用程序之外自己使用.因此,单独分发它们是没有意义的.

安装我的应用程序时,设置文件必须包含以下内容:

INSTALLED_APPS = (
    ...
    'myapp',
    'myapp.subapp1',
    'myapp.subapp2',
    ...
)
Run Code Online (Sandbox Code Playgroud)

......这显然不是最理想的.这也有要求,所有的子应用程序是由他们的"内部"名称简称(即稍微讨厌的结果subapp1,subapp2等等).例如,如果我想重置subapp1的数据库表,我必须键入:

python manage.py reset subapp1
Run Code Online (Sandbox Code Playgroud)

这很烦人,特别是因为我有一个名为的子应用程序core- 当我的应用程序安装在用户的项目中时,它很可能与另一个应用程序的名称冲突.

我是完全错误地做了这个,还是在那里迫使这些"内部"应用程序以他们的全名引用?

Oli*_*ier 12

你正在以正确的方式做到这一点,因为django本身就是这样做的.例如,管理员应用程序已在INSTALLED_APPSas中注册django.contrib.admin,但要重置它,您必须使用manage.py reset admin,实际上,manage.py reset django.contrib.admin 它不起作用.

它可以被认为是django中的一个bug ...

但是,您不应该担心名称冲突,因为您应该始终在virtualenv环境中运行django ,与python安装的其余部分隔离.与在普通的python安装上运行django相比,这是一个非常强大和灵活的解决方案.更多信息,例如,这里:http://mathematism.com/2009/jul/30/presentation-pip-and-virtualenv/