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

Django模板无法显示评论上下文,请求排查帮助

问题分析与解决方案

你的核心问题是:使用{% include %}引入模板时,它依赖的是父模板(list_detail.html)的上下文,而非你单独定义的listcomments视图的上下文。你的TheirDetailView没有传递评论数据到模板,导致list_comment.html里的model变量不存在,循环无法执行,所以评论不显示。

具体修复步骤

1. 优化模型字段(符合规范并简化关联)

修改models.py中Review的外键字段,将大写List改为小写list(遵循PEP8命名规范),并添加related_name方便反向查询:

class Review(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    # 修改字段名并添加反向关联名
    list = models.ForeignKey(List, on_delete=models.CASCADE, related_name='reviews')
    comment = models.TextField(max_length=250)
    rate = models.IntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.comment)

2. 修改DetailView,传递评论上下文

更新views.py中的TheirDetailView,通过get_context_data方法将当前List对应的评论传递到模板:

class TheirDetailView(DetailView):
    model = List

    def get_context_data(self, **kwargs):
        # 先获取默认上下文
        context = super().get_context_data(**kwargs)
        # 添加当前List的所有评论到上下文
        context['reviews'] = self.object.reviews.all()
        return context

# 可以删除多余的listcomments函数,因为不再用到它

3. 调整评论模板的循环变量

修改list_comment.html,使用新的上下文变量reviews,同时修复多余的闭合标签:

{% load static %}
{% for review in reviews %}
<div class="comment-contentsas">
    <p class="commentor-name">{{ review.user.username }}</p>
</div>
<div class="comment-contentsas">
    <p>{{ review.comment }}</p>
</div>
{% endfor %}

4. 清理无用路由

删除urls.py中多余的评论路由,因为现在评论数据是通过DetailView传递的,无需单独路由:

# 删除这一行:
# path('comment/',views.listcomments, name='ListComments'),

5. 验证后台数据

确保你在后台创建的5条Review对象,都正确关联了对应的List实例(即list字段选择了具体的List对象),否则即使代码正确,也不会显示评论。

内容的提问来源于stack exchange,提问作者Ayat Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:30:57