【发布时间】:2021-09-19 05:17:34
【问题描述】:
研究序言:我尝试了什么?
我是 Django 新手,在尝试遵循最佳实践的同时不断学习。我正在研究两勺 Django 3.x。任何关于结构的问题都应直接向作者提出。
我希望这个问题足够扎实,不会在最初的几分钟内被删除,因为我真的被这个问题困住了。如果要删除此问题,我将不胜感激有关如何改进我将来提出问题的方式的指导。我已经阅读了如何提出好问题的博客,并希望我能遵循这个指导。如果我确实错过了什么,请做的不仅仅是提供博客链接。
- 请注意,我已经研究过这个问题,我最接近的是 Django 1.7 的问答:Django 1.7 app config ImportError: No module named appname.apps:这个解决方案对我不起作用(尽管它确实给了我一个很好的尝试途径)。有趣的是,他们选择了与我 5 年前完全相同的应用程序结构。请注意,在 config 中提供项目名称并没有像 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 时,出现问题。问题是,这让我更加困惑。我正在尝试添加模板。我正在遵循的过程是:
- 在根目录中创建模板目录,以文章作为子目录(遵循两个独家新闻中推荐的结构 - 这背后的逻辑是允许创建可用于所有应用程序的基本模板 - 这就是我想用这种方法来完成)。
- 此时我得到了
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 的其他方面,看看我是否指错了人。
【问题讨论】:
-
您的项目结构看起来很奇怪。你有你的项目
LanesFlow然后在其中你有一个名为apps的子目录,其中有一个名为articles的应用程序?为什么要重新安排 Django 项目结构? -
根据帖子(字面意思是第一句话),我正在遵循书中建议的方法,Django 3.1 的两个独家新闻:feldroy.com/products/two-scoops-of-django-3-x 请直接向作者提出有关项目结构的问题。跨度>
-
我正在根据进一步的故障排除编辑原始问题。
-
我有一个这样的项目,这是一种很好的方式。这也是一个很好的问题,所以否决票是严厉的。你的问题真的是如何形成你的应用配置和定义你安装的应用吗?