python - Django : Can't import 'module' . 检查模块AppConfig.name是否正确

标签 python django python-3.x

可能看起来像是一个已经回答过的问题,实际上 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 文档时,我引用:

New applications should avoid default_app_config. Instead they should require the dotted path to the appropriate AppConfig subclass to be configured explicitly in INSTALLED_APPS.

很好,这是一个新的应用程序,所以我应该这样做:但我遇到了一个错误。这不是 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

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

预先感谢您的宝贵时间。

最佳答案

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

AppConfig.name

Full Python path to the application, e.g. 'django.contrib.admin'.

This attribute defines which application the configuration applies to. It must be set in all AppConfig subclasses.

It must be unique across a Django project.

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

试试这个:

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

关于python - Django : Can't import 'module' . 检查模块AppConfig.name是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46177499/

相关文章:

python - PDF 文件操作(打开一个大的 pdf 文件,找到关键字,然后保存找到的页面,然后拆分这些页面并将它们合并为一个 pdf)

python - Matplotlib:绘制二元高斯曲线下的路径积分

python 字典列表如何合并键 :value where values are same?

python - 如何在 Django 模板中呈现变量?

python - 向 django 注册表单添加额外字段

python - 为什么 deque 实现为链表而不是循环数组?

python - 使用 Python 进行参数扩展

python - 在 EOS 上用 Python 重启 GStreamer 管道

javascript - 如何使用 jQuery 在 Django Autocomplete Light 小部件上捕获更改事件

python - H2O 时的 MAPE 公制