Django:无法导入“module”,请检查模块AppConfig.name是否正确

v6ylcynt  于 2022-11-18  发布在  Go
关注(0)|答案(2)|浏览(135)

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

manage.py
compfactu/---settings.py
          |--__init__.py
          |--core/--------__init__.py
                         |-apps.py

下面是我在INSTALLED_APPS中添加应用的过程:

应用程序.py

from django.apps import AppConfig

class CoreConfig(AppConfig):
    name = 'core'

设置.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',
]

它工作!我不明白这一点!阅读文档(我刚刚引用的部分),它不应该工作(注意,我没有一个default_app_config在我的__init__.py
所以,作为我发现“窍门”但没有解释的问题,我在这里问为什么它这样工作时,它不应该,为什么在官方文件中的解决方案不工作?
提前感谢您抽出时间。

zsbz8rwp

zsbz8rwp1#

根据文档,AppConfig.name是应用程序的完整python路径。
第1001章:我的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'
8hhllhi2

8hhllhi22#

在www.example.com中apps.py,确保包含应用程序的完整路径:

class CoreConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'compfactu.core'

相关问题