Django 文档说:
INSTALLED_APPS 中定义的模块路径的最后虚线部分必须是唯一的
我正在开发基于 Django 的 CMS。问题来了:两个第 3 方开发者创建两个同名的不同应用程序的时刻将会到来。
为什么会这样?有没有可能克服这个限制?
Django 文档说:
INSTALLED_APPS 中定义的模块路径的最后虚线部分必须是唯一的
我正在开发基于 Django 的 CMS。问题来了:两个第 3 方开发者创建两个同名的不同应用程序的时刻将会到来。
为什么会这样?有没有可能克服这个限制?
目前,唯一的解决方案是使用唯一的应用程序名称。这是一个已知的限制,目前正在处理中。
作为参考,它是Arthur Koziel 在 2010 Google Summer of Code 期间被接受的项目之一,您可以在 Django 的 2010 GSOC wiki 页面上查看一些背景和设计注意事项。
我目前的理解是 Arthur 的工作在很大程度上是成功的,但由于担心使 1.3 版本成为功能轻/错误修复重的版本,因此决定将应用加载重构分支合并到主干中,直到 1.4 开发周期。
这主要是因为 Django 在某些地方使用最后一部分作为“app_label”属性。
例如,someModel._meta.app_label
可以在多数据库场景中使用,以决定将模型实例存储到哪个数据库。它也用于管理命令(您必须输入“manage.py sqlall sites”而不是“django.contrib.sites”)。
如何解决这个限制?好吧,如果应用程序不以任何方式依赖其名称,我认为应用程序重命名应该可以工作。但大多数应用程序实际上使用 URLconf 中的应用程序名称,例如 ( patterns("appname.views", ...)
),因此也必须更改。
但说真的,为什么要安装两个同名的应用程序?如果它们真的具有相同的名称,它们通常具有相同的功能(例如称为“分页”的应用程序),因此无需使用多个。
当两个第 3 方开发人员创建两个具有相同名称的不同应用程序的时刻将会到来。
错误的。
他们可以轻松地将其应用程序重命名为唯一的。
有没有可能克服这个限制?
是的。重命名应用程序。这很简单。你改变了包名,它就改变了。这有多难?