【问题标题】:Django sub-applications & module structureDjango 子应用和模块结构
【发布时间】:2011-02-06 17:36:10
【问题描述】:

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

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

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

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

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

python manage.py reset subapp1

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

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

【问题讨论】:

  • 为什么这对您来说不是最理想的?你能澄清一下你想要达到的目标吗?
  • 只是因为,为了安装我的“应用程序”,父模块中的每个应用程序都是必需的,所以它确实是数据复制。此外,如果我们添加任何子应用程序,则必须在每次安装时将它们添加到已安装应用程序列表中。

标签: python django django-apps


【解决方案1】:

您的做法是正确的,因为 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/

【讨论】:

  • 我已经在使用 virtualenv,但这并不能解决问题——因为用户实际上很可能在他们的项目中创建一个名为 core 的应用程序,这会与我的 @ 冲突987654329@应用程序。
  • 当然,这是一个限制。我提交了一个补丁:code.djangoproject.com/attachment/ticket/13323/applabel.diff 另见相应的票。不过,我不确定问题是否已完全解决。
  • 我不知道有人在讨论这个问题,谢谢。 Ticket #3591 看起来最有希望,但它不在 1.2 的列表中,所以我想我只需要解决这个问题,直到发生某些事情。我不想为这个项目运行自定义安装的 Django :)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 1970-01-01
  • 2020-06-12
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多