Django博客article_details页面文章内容无法正常显示问题
问题原因
你的文章详情视图类选错了继承基类:ArticleDetails目前继承的是ListView(列表视图),这类视图天生用于返回多条数据的集合(QuerySet),哪怕你过滤后只剩1条匹配数据,传递给模板的article变量本质还是一个查询集合,不是单个Article模型实例,自然无法正常读取实例上的content、mini_description、created_at等属性。
你看到能正常显示的标题,是你在get_context_data里单独查询后手动塞进context的字符串title,不是从article实例里取到的属性。
修复方案
- 修正视图类继承逻辑
详情页应该使用Django内置的DetailView(单对象详情视图)作为基类,不要继承列表视图类。修改后的views.py对应代码如下:# 先在视图文件头部导入DetailView from django.views.generic import DetailView # 分类文章列表逻辑不用动,只改详情类 class ArticleDetails(DetailView): model = Article context_object_name = 'article' template_name = 'blog/article_details.html' def get_queryset(self): # 保留原有发布状态过滤、关联查询优化逻辑 return Article.objects.filter(is_published=True).select_related('category') def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # self.object就是当前匹配到的单篇文章实例,无需重复查库 context['title'] = f"Article: {self.object.title}" return context - 补全模板图片地址
目前模板里的img标签src属性为空,修改为读取文章封面图地址:<img src="{{ article.photo.url }}" alt="{{ article.title }}"> - 数据校验
你的content字段设置了blank=True允许为空,修改完代码如果还是不显示内容,去后台管理确认对应文章的content字段确实填写了内容即可。
额外提示:你的分类列表视图里排序参数名拼写错误,
sort_filed应为sort_field,不影响本次详情页问题,只是排序功能会不生效。
内容的提问来源于stack exchange,提问作者Saidcheek
相关产品推荐
相关产品推荐

