19

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

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

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

INSTALLED_APPS = (
    ...
    'myapp',
    'myapp.subapp1',
    'myapp.subapp2',
    ...
)

...这显然是次优的。这也有一个稍微令人讨厌的结果,即要求所有子应用程序都由它们的“内部”名称(即subapp1subapp2)引用。例如,如果我想重置 subapp1 的数据库表,我必须输入:

python manage.py reset subapp1

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

我这样做是完全错误的,还是强迫这些“内部”应用程序用它们的全名来引用?

4

1 回答 1

12

您正在以正确的方式进行操作,因为 django 本身就是这样做的。例如,管理应用程序注册INSTALLED_APPSdjango.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/

于 2010-04-11T16:17:31.153 回答