You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:21:34