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

Django视图数据渲染至HTML问题:无法展示主题内容

问题排查与修复方案

核心问题分析

你的代码存在3个关键错误导致数据无法渲染:

  1. 模板变量访问错误:直接使用字段名(如{{lesson_no}})而非通过上下文对象(topic_detail)访问属性
  2. 不存在的字段引用:模板中使用了Model未定义的book_text_explination字段
  3. 错误的循环遍历:topic_detail是单个模型对象(通过get()获取),不能用for循环遍历

另外还有一些代码规范问题,一并修正。

修正后的代码

1. 修正Model(规范类名、字段拼写与格式)

class BookExplanation(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(max_length=250, null=True, blank=True, unique=True)
    lesson_no = models.CharField(max_length=255)
    book_text = models.TextField(blank=False, null=False)

    # 可选:添加get_absolute_url方法,方便生成详情页链接
    def get_absolute_url(self):
        return reverse('topic_detail', kwargs={'slug': self.slug})

2. 修正View(语义化参数名)

def topic_detail(request, slug):
    topic_detail = BookExplanation.objects.get(slug=slug)
    return render(request, 'blog/topic_detail.html', {'topic_detail': topic_detail})

3. 修正URL配置(匹配View的参数名)

path('', books_list, name="books_list"),
path('book_topics/', book_topics, name="book_topics"),
path('book_topics/<slug:slug>/', topic_detail, name='topic_detail'),

4. 修正HTML模板(正确访问对象属性)

{% block content %}
  <div class="container">
    <p>{{ topic_detail.lesson_no | safe }}</p>
    <p>{{ topic_detail.book_text | safe }}</p>
    <!-- 移除不存在的book_text_explination字段,或在Model中添加该字段 -->
  </div>
{% endblock %}

<!-- 单个对象无需循环,直接展示属性即可 -->
<ul>
  <li>{{ topic_detail.lesson_no }}</li>
  <li>{{ topic_detail.title }}</li>
  <li>{{ topic_detail.book_text | truncatechars:50 }}</li>
</ul>

额外说明

  • 确保你的slug字段已经正确生成(可以通过Django Admin手动填写,或在Model中重写save()方法自动生成)
  • 如果需要展示多个主题列表,应该在对应的View中使用BookExplanation.objects.all()获取QuerySet,再传递给模板用for循环遍历

内容的提问来源于stack exchange,提问作者Syed Shehab Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:35:21