研究序言:我尝试过什么?
我是 Django 新手,在尝试遵循最佳实践的同时不断学习。我正在学习《Two Scoops of Django 3.x》。对结构的任何疑问都应直接向作者提出。
我希望这个问题足够扎实,不会在前几分钟内被删除,因为我真的陷入了这个问题。如果要删除此问题,我将不胜感激有关如何改进我将来提问方式的指导。我已阅读如何提出好问题博客,并希望我能遵循此指南。如果我确实错过了某些内容,请不仅仅提供博客链接。
- 请注意,我已经研究过这个问题,最接近的是 Django 1.7 的问答:Django 1.7 app config ImportError: No module named appname.apps :这个解决方案对我来说不起作用(尽管它确实给了我一个很好的尝试途径)。有趣的是,他们选择了与我 5 年前完全相同的应用程序结构。请注意,在配置中提供项目名称并没有像OP那样解决这个问题。
其他未产生所需解决方案的问题:
- django error - ImportError: No module named apps - 我尝试了这个答案,但它对我不起作用
- Django Mezzanine ImportError: No module named apps - 我确认我指向 PyCharm 中专门创建的虚拟环境。根据 Django 3.2 的两勺,我安装了一个单独的 envs 文件夹,并为此项目激活了专用的 Lanesflow_env。 PyCharm 似乎已经完成了这一任务,因为 base.py (settings.py) 中的 MIDDLEWARE 已成功导入所有 django 中间件应用程序。
其他不直接相关的问题(至少据我有限的经验所知):
- Django - ImportError: No module named apps
- CherryPy 3.2 ImportError: No module named wsgiserver3
- ImportError: Module "whitenoise.middleware" does not define a "WhiteNoiseMiddleWare" attribute/class
- ImportError: No module named apps from django-grappelli
问题的相关信息
这是项目树:
articles/__init__.py
的内容:
default_app_config = 'LanesFlow.apps.articles.apps.ArticlesConfig'
articles/apps.py
的内容:
from django.apps import AppConfig
class ArticlesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.articles'
class ArticlesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'LanesFlow.apps.articles' # This was checked per the answer to the researched question
已安装应用程序 base.py
(settings.py
):
INSTALLED_APPS = [
'apps.articles.ArticlesConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
错误追溯:
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
File "C:\Users\Carewen\AppData\Local\Programs\Python\Python39\lib\threading.py", line 954, in _bootstrap_inner
self.run()
File "C:\Users\Carewen\AppData\Local\Programs\Python\Python39\lib\threading.py", line 892, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\Carewen\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "C:\Users\Carewen\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\commands\runserver.py", line 110, in inner_run
autoreload.raise_last_exception()
File "C:\Users\Carewen\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\autoreload.py", line 87, in raise_last_exception
raise _exception[1]
File "C:\Users\Carewen\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\__init__.py", line 375, in execute
autoreload.check_errors(django.setup)()
File "C:\Users\Carewen\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "C:\Users\Carewen\AppData\Local\Programs\Python\Python39\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\Carewen\AppData\Local\Programs\Python\Python39\lib\site-packages\django\apps\registry.py", line 91, in populate
app_config = AppConfig.create(entry)
File "C:\Users\Carewen\AppData\Local\Programs\Python\Python39\lib\site-packages\django\apps\config.py", line 221, in create
raise ImportError(msg)
ImportError: Module 'apps.articles' does not contain a 'ArticlesConfig' class.
欢迎任何帮助。
编辑
我已再次恢复到上一个工作版本。我已经找到哪里出错了。当我尝试将 'articles.app.ArticleConfig' 添加到 INSTALLED_APPS
时事情出了问题。问题是,这让我更加困惑。我正在尝试添加模板。我遵循的过程是:
- 在根目录中创建 templates 目录,以articles 作为子目录(遵循两勺中推荐的结构 - 其背后的逻辑是允许创建可用于所有应用程序的基本模板 - 这就是我想用这种方法来完成)。
- 此时我得到
ImportError
。然而,apps.py
文件确实联系了类ArticlesConfig(AppConfig)
也在 base.py
(settings.py
):
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'apps.templates'], # Two scoops add. Was []
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
我仍然很困惑。我对 Django 的缺乏经验在这里得到了充分体现。我不确定添加INSTALLED_APPS
我做错了什么。我的直觉引导我探索 settings.py 的其他方面,看看我是否错误地指出了某人。
最佳答案
问题似乎与:
INSTALLED_APPS = [
'apps.articles.ArticlesConfig',
应该是:'apps.articles.apps.ArticlesConfig',
此外,您的articles/apps.py 内容应该仅为:
from django.apps import AppConfig
class ArticlesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.articles'
关于python - 在 Django 3.2 中我收到此错误 : app ImportError: Module 'apps.articles' does not contain a 'ArticlesConfig' class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68306715/