如何在Django 1.7中解决“django.core.exceptions.ImproperlyConfigured:应用程序标签不唯一,重复:foo”?

在升级到Django 1.7时,我从./manage.py收到以下错误消息

 $ ./manage.py Traceback (most recent call last): File "./manage.py", line 16, in <module> execute_from_command_line(sys.argv) File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 427, in execute_from_command_line utility.execute() File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 391, in execute django.setup() File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/__init__.py", line 21, in setup apps.populate(settings.INSTALLED_APPS) File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/apps/registry.py", line 89, in populate "duplicates: %s" % app_config.label) django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: foo 

有什么问题,我该如何解决?

问题是,随着Django 1.7中对应用程序的更改,应用程序需要具有唯一的标签。

默认情况下,应用程序标签是包名称,所以如果你有一个与你的应用程序模块名字相同的包(在这个例子中是foo ),你会遇到这个错误。

解决scheme是覆盖您的应用程序的默认标签,并强制该configuration通过将其添加到__init__.py来加载。

 # foo/apps.py from django.apps import AppConfig class FooConfig(AppConfig): name = 'full.python.path.to.your.app.foo' label = 'my.foo' # <-- this is the important line - change it to anything other than the default, which is the module name ('foo' in this case) 

 # foo/__init__.py default_app_config = 'full.python.path.to.your.app.foo.apps.FooConfig' 

请参阅https://docs.djangoproject.com/en/1.7/ref/applications/#for-application-authors

我发现这个简单的解决scheme。 在我的情况下,在INSTALLED_APPS下添加两行,

 'django.contrib.foo', 

删除了一行可以解决我的问题。

正如其中所说,这是一个新的Django 1.7 function ,它增加了一种“应用程序registry”,其中应用程序必须唯一确定(而不仅仅是具有不同的pythonpath)。

name属性是pythonpath(唯一),但label也应该是唯一的。 例如,如果您有一个名为“admin”的应用程序,那么您必须定义名称(name ='python.path')和一个必须也是唯一的标签(label ='my admin'),或者如上所述放置完整的pythonpath总是唯一的)。

我有同样的错误 – 试试这个:

在INSTALLED_APPS中,如果包含'foo.apps.FooConfig',那么Django已经知道在应用程序中包含foo应用程序,因此不需要包含'foo'。 在INSTALLED_APPS下有'foo'和'foo.apps.FooConfig'可能是你的问题的根源。

那么,我创build了auth应用程序,我已经将它包含在INSTALLED_APP就像src.auth (因为它在src文件夹中),我得到这个错误,因为还有django.contrib.auth应用程序。 所以我把它重命名为authentication和问题解决。

如果你想回老版本,命令

 pip install django==1.6.7