Django子应用和模块结构
我正在开发一个Django应用,这个应用比较大,需要多个子应用来保持结构清晰。因此,我有一个顶层目录,它是一个Django应用(因为里面有一个空的 models.py
文件),还有多个子目录,这些子目录本身也是应用。
我这样布局应用的原因是因为这些子应用是分开的,但它们永远不会单独使用,都是依赖于父应用的。所以,把它们单独分发出去是没有意义的。
在安装我的应用时,设置文件里必须包含类似这样的内容:
INSTALLED_APPS = (
...
'myapp',
'myapp.subapp1',
'myapp.subapp2',
...
)
...这显然不是最优的做法。这还带来了一个小麻烦,就是所有的子应用都必须用它们的“内部”名称来引用(也就是 subapp1
、subapp2
等等)。举个例子,如果我想重置 subapp1 的数据库表,我必须输入:
python manage.py reset subapp1
这真的很烦人,尤其是因为我有一个叫 core
的子应用——当我的应用被安装到用户的项目里时,这个名字可能会和其他应用的名字冲突。
我这样做是不是完全错了,或者有没有办法强制这些“内部”应用用它们的全名来引用呢?
1 个回答
你这样做是对的,因为django本身就是这么做的。比如,管理后台这个应用在INSTALLED_APPS
里注册为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/