Django: 无法导入 'module'。请检查 module AppConfig.name 是否正确。
Django: 无法导入 'module'。请检查 module AppConfig.name 是否正确。
这可能看起来像是一个已经回答过的问题,实际上在这里你有一个类似的问题(有点像)我有的问题。我的问题是,这只是一个技巧,一行代码,没有解释(尽管它仍然有所不同,但给出的解决方案有效,这是我的问题的一部分)。
这是我的项目结构,简化版:
manage.py compfactu/---settings.py |--__init__.py |--core/--------__init__.py |-apps.py
这是我如何在INSTALLED_APPS
中添加我的应用程序:
apps.py
from django.apps import AppConfig class CoreConfig(AppConfig): name = 'core'
settings.py
INSTALLED_APPS = [ ... #compfactu 模块 'compfactu.core.apps.CoreConfig', ]
根据我阅读的Django 1.11文档,我引用了以下内容:
新的应用程序应避免使用default_app_config。相反,他们应该要求在INSTALLED_APPS中明确配置适当的AppConfig子类的点路径。
好吧,很好,这是一个新的应用程序,所以我应该这样做:但我得到了一个错误。这不是Python路径的问题,因为我刚刚打开了一个Python shell,我可以毫无问题地执行from compfactu.core.apps import CoreConfig
(也打印出sys.path,一切正常)。
但是我有这个错误,下面是完整的回溯:
Traceback (most recent call last): File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/apps/config.py", line 147, in create app_module = import_module(app_name) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "", line 986, in _gcd_import File " ", line 969, in _find_and_load File " ", line 956, in _find_and_load_unlocked ImportError: No module named 'core' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/autoreload.py", line 228, in wrapper fn(*args, **kwargs) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run autoreload.raise_last_exception() File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/autoreload.py", line 251, in raise_last_exception six.reraise(*_exception) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise raise value.with_traceback(tb) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/autoreload.py", line 228, in wrapper fn(*args, **kwargs) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/__init__.py", line 27, in setup apps.populate(settings.INSTALLED_APPS) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/apps/registry.py", line 85, in populate app_config = AppConfig.create(entry) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/apps/config.py", line 151, in create app_name, mod_path, cls_name, django.core.exceptions.ImproperlyConfigured: Cannot import 'core'. Check that 'compfactu.core.apps.CoreConfig.name' is correct.
从那里开始,所有的文件和类都是由Django生成的(manage.py startapp)。
当我按照上面链接的问题所说的那样做时,像这样:
INSTALLED_APPS = [ ... #compfactu 模块 'compfactu.core', ]
它就可以工作了!我不明白这一点!根据我阅读的文档(我刚刚引用的部分),它不应该工作(请注意,我在我的__init__.py
中没有default_app_config
)。
因此,就像我在上面链接的问题中找到的"技巧"但没有解释那样,我在这里问为什么它会在不应该工作的情况下工作,以及为什么官方文档中的解决方案不起作用?
非常感谢您的时间。