【问题标题】:Django : Can't import 'module'. Check that module AppConfig.name is correctDjango:无法导入“模块”。检查模块 AppConfig.name 是否正确
【发布时间】:2023-03-28 11:15:02
【问题描述】:

可能看起来像一个已经回答的问题,实际上here 你有同样的问题(种类)我有。我的问题是,这只是一个技巧,一行,没有解释(它仍然不同,但给出的解决方案有效,这是我问题的一部分)。 这是我的项目结构,经过简化:

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 modules
    'compfactu.core.apps.CoreConfig',
]

当我阅读 django 1.11 文档时,我引用了:

新应用程序应避免使用 default_app_config。相反,他们应该要求在 INSTALLED_APPS 中显式配置相应 AppConfig 子类的虚线路径。

很好,这是一个新应用程序,所以我应该这样做:但我遇到了一个错误。这不是pythonpath的问题,因为我刚刚打开了一个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 "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", 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 modules
    'compfactu.core',
]

它有效!我不明白这一点!阅读文档(我刚刚引用的部分),它不应该工作(注意我的__init__.py 中没有default_app_config

所以,作为我找到“技巧”但没有解释的问题,我在这里问为什么它不应该以这种方式工作,以及为什么官方文档中的解决方案不起作用?

提前感谢您的宝贵时间。

【问题讨论】:

    标签: python django python-3.x


    【解决方案1】:

    根据文档,AppConfig.name 是应用程序的完整 python 路径。

    AppConfig.name

    应用程序的完整 Python 路径,例如'django.contrib.admin'.

    此属性定义配置适用于哪个应用程序。 它必须在所有 AppConfig 子类中设置。

    它在 Django 项目中必须是唯一的。

    https://docs.djangoproject.com/en/2.2/ref/applications/#django.apps.AppConfig.name

    试试这个:

    class CoreConfig(AppConfig):
        name = 'compfactu.core'
    

    【讨论】:

    • 很好,就是这样。因为我在“普通”django 项目树中还有一个目录。谢谢。
    • 拯救了我的一天。非常感谢
    • 也拯救了我的一天。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2015-08-09
    • 1970-01-01
    • 2018-08-05
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多