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

Django评论提交后仅显示空HTML标签问题求助

问题排查与修复方案

1. 模板循环变量引用错误

模板中for循环遍历的是comments集合,但内部错误地使用了集合名comments来访问单个评论的属性,导致无法正确渲染数据,出现空标签。

修正后的模板代码:

<form action="{% url 'listing' listing.title %}" method="POST">
    {% csrf_token %}
    {{ commentform }}
    <input type="submit" value="Comment" name="comment">
</form>

<div class="comment">
    <h5>Comments</h5>
    {% for comment in comments %}
        <p>{{ comment.user_commented }}</p><span>{{ comment.date_time }}</span>
        <p>{{ comment.comment }}</p>
        <br>
    {% endfor %}
</div>

2. 视图层评论创建逻辑错误

  • 表单验证方法调用错误:comment.is_valid是方法引用,必须加括号调用comment.is_valid(),否则会被判定为永远有效。
  • 字段赋值错误:直接将CommentForm实例传给comment字段,而非表单中的实际评论内容,需要从cleaned_data中提取值。
  • 冗余代码:create()方法会自动保存对象到数据库,无需额外调用save()。

修正后的views.py代码片段:

commentform = CommentForm()

if "comment" in request.POST:
    comment = CommentForm(request.POST)
    if comment.is_valid():
        # 从表单清洗后的数据中获取评论内容
        comment_content = comment.cleaned_data['comment']
        # 创建评论对象
        Comments.objects.create(
            list_title=title, 
            user_commented=username, 
            list_author=author, 
            comment=comment_content
        )
        # 获取当前列表的所有评论(无需转成list,QuerySet可直接迭代)
        comment_data = Comments.objects.filter(list_title=title)
        return render(request, "auctions/listing.html", {
                "form": form,
                "listing": listing_object,
                "checkbox": checkbox,
                "commentform": CommentForm(),  # 重置表单,避免提交后保留旧内容
                "max_bid": max_bid,
                "comments": comment_data
            })

# GET请求处理部分
comment_data = Comments.objects.filter(list_title=title)
return render(request, "auctions/listing.html", {
        "form": form,
        "listing": listing_object,
        "checkbox": checkbox,
        "commentform": commentform,
        "max_bid": max_bid,
        "users": author,
        "comments": comment_data
    })

3. 额外优化建议

  • 将comment = CommentForm(request.POST)移到if "comment" in request.POST分支内部,避免GET请求时初始化POST表单引发不必要的错误。
  • 无需将QuerySet转成list,Django模板可直接迭代QuerySet对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:55:34