Django中INSTALLED_APPS唯一名称限制
Django的文档提到:
在INSTALLED_APPS中定义的模块路径的最后一部分必须是唯一的。
我正在基于Django开发一个内容管理系统(CMS)。现在出现了一个问题:可能会有两个不同的第三方开发者创建两个同名的应用。
为什么会这样呢?有没有办法解决这个限制呢?
3 个回答
总有一天,会有两个第三方开发者创建两个名字相同的应用。
这是不可能的。
他们可以很简单地把自己的应用改个名字,让它们变得独一无二。
有没有办法解决这个限制呢?
有的。只需要改名字就行了。这很简单。你只要改一下包名,名字就变了。这有什么难的呢?
这主要是因为Django在某些地方会把最后一部分当作“app_label”属性来使用。
比如说,someModel._meta.app_label
可以在多数据库的情况下用来决定一个模型实例应该存储到哪个数据库里。它也被用在管理命令中(你必须输入“manage.py sqlall sites”,而不是“django.contrib.sites”)。
那么,如何解决这个限制呢?我觉得如果应用程序不依赖于它的名字,重命名是可以的。但大多数应用其实在URL配置中会用到应用的名字,比如说(patterns("appname.views", ...)
),所以这部分也得改。
不过说真的,为什么会安装两个同名的应用呢?如果它们真的同名,通常功能也是一样的(比如叫“pagination”的应用),所以其实没必要用两个。
目前唯一的解决办法就是使用独特的应用名称。这是一个大家都知道的限制,正在努力解决中。
作为参考,这个问题曾经是2010年谷歌暑期编程项目中被接受的一个项目,由Arthur Koziel负责,你可以在Django的2010年GSOC维基页面上看到一些背景和设计考虑。
我目前的理解是,Arthur的工作基本上是成功的,但由于担心1.3版本会变得功能少、修复多,因此决定将应用加载重构的部分推迟到1.4版本的开发周期中再合并。