我正在开发一个Django应用程序,这是一个需要多个子应用程序以保持整洁的大型系统。因此,我有一个顶级目录,它是一个Django应用程序(因为它有一个空的models.py
文件),以及多个子目录,它们本身也是应用程序。
我以这种方式放置我的应用程序的原因是因为子应用程序是分开的,但它们永远不会在父应用程序之外自己使用。因此,将它们分开分发是没有意义的。
安装我的应用程序时,设置文件必须包含以下内容:
INSTALLED_APPS = (
...
'myapp',
'myapp.subapp1',
'myapp.subapp2',
...
)
......这显然不是最理想的。这也有一个令人讨厌的结果,即要求所有子应用程序通过其“内部”名称(即subapp1
,subapp2
等)引用。例如,如果我想重置subapp1的数据库表,我必须输入:
python manage.py reset subapp1
这很烦人,特别是因为我有一个名为core
的子应用程序 - 当我的应用程序安装在用户的项目中时,它很可能与另一个应用程序的名称冲突。
我是完全错误地做了这个,还是在那里迫使这些“内在”应用程序以他们的全名引用?
答案 0 :(得分:12)
你正在以正确的方式去做,因为django本身就是这样做的。例如,管理员应用已在INSTALLED_APPS
注册为django.contrib.admin
,但要重置它,您必须使用manage.py reset admin
,实际上,manage.py reset django.contrib.admin
无法正常工作
它可以被视为django中的一个错误...
然而,你不应该担心名称冲突,因为你应该总是在virtualenv
环境中运行django,与python安装的其余部分隔离。与在普通的python安装上运行django相比,这是一个非常强大和灵活的解决方案。例如,更多信息:http://mathematism.com/2009/jul/30/presentation-pip-and-virtualenv/