可能看起来像是一个已经回答过的问题,实际上 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/