Python Django子应用程序和;模块结构
我正在开发一个Django应用程序,这是一个大型系统,需要多个子应用程序来保持整洁。因此,我有一个顶级目录,它是Django应用程序(因为它有一个空的Python Django子应用程序和;模块结构,python,django,django-apps,Python,Django,Django Apps,我正在开发一个Django应用程序,这是一个大型系统,需要多个子应用程序来保持整洁。因此,我有一个顶级目录,它是Django应用程序(因为它有一个空的models.py文件),还有多个子目录,它们本身也是应用程序 我以这种方式部署应用程序的原因是,子应用程序是分开的,但它们永远不会在父应用程序之外单独使用。因此,将它们分开分发是没有意义的 安装我的应用程序时,设置文件必须包括以下内容: INSTALLED_APPS = ( ... 'myapp', 'myapp.suba
models.py
文件),还有多个子目录,它们本身也是应用程序
我以这种方式部署应用程序的原因是,子应用程序是分开的,但它们永远不会在父应用程序之外单独使用。因此,将它们分开分发是没有意义的
安装我的应用程序时,设置文件必须包括以下内容:
INSTALLED_APPS = (
...
'myapp',
'myapp.subapp1',
'myapp.subapp2',
...
)
…这显然是次优的。这还有一个略微令人讨厌的结果,即要求所有子应用程序都以其“内部”名称引用(即subapp1
,subapp2
等)。例如,如果要重置SubApp 1的数据库表,则必须键入:
python manage.py reset subapp1
这很烦人,尤其是因为我有一个名为core
的子应用程序,当我的应用程序安装在用户的项目中时,它可能与另一个应用程序的名称冲突
我这样做是完全错误的,还是为了强迫这些“内部”应用程序被全名引用?你这样做是正确的,因为django本身就是这样做的。例如,管理员应用程序在
已安装的应用程序中注册为django.contrib.admin
,但要重置它,您必须使用manage.py reset admin
,实际上,manage.py reset django.contrib.admin
不起作用
它可以被认为是django中的一个bug
但是,您不应该担心名称冲突,因为您应该始终在virtualenv
环境中运行django,与python安装的其余部分隔离。这是一个比在普通python安装上运行django更强大、更灵活的解决方案。更多信息,例如,请点击此处:为什么这对您来说是次优的?你能澄清一下你想要实现什么吗?仅仅是因为,为了安装我的“应用程序”,父模块中的每个应用程序都是必需的,所以它实际上是重复数据。此外,如果我们添加任何子应用程序,它们必须添加到每个安装的已安装应用程序列表中。我已经在使用virtualenv,但这并不能解决问题-因为用户实际上很可能在其项目中创建名为core
的应用程序,这将与我的core
应用程序冲突。当然,这是一个限制。我提交了一个补丁:请参阅相应的票证。不过,我不确定这个问题是否完全解决了。我不知道正在讨论这个问题,谢谢。票子3591看起来最有希望,但它不在1.2的名单上,所以我想我必须解决这个问题,直到事情发生。我不喜欢为此项目运行Django的自定义安装:)。