Django2.2中如何在report_detail.html展示评论?修改后未成功求助
解决Django 2.2中Report详情页展示关联评论的问题
你已经在模型层正确建立了Report和Comment的关联(通过related_name='comments'),问题核心在于模板未渲染评论数据,下面是具体的修复步骤:
1. 确认视图无需额外调整
你的ReportDetailView继承自DetailView,它会自动将当前的Report对象以object(或report,对应模型名)的变量名传递到模板中,所以views.py不需要修改,默认的上下文传递已经满足需求。
2. 修改report_detail.html渲染评论
在现有文章内容的下方,添加评论展示的代码块,遍历该报告关联的所有评论:
<div class="article-entry"> <h2>{{ object.done }}</h2> <p>by {{ object.author }} | {{ object.date }}</p> <p>{{ object.willDo }}</p> </div> <!-- 新增评论展示区域 --> <div class="comments-section"> <h3>评论</h3> {% if object.comments.all %} {% for comment in object.comments.all %} <div class="comment"> <p><strong>{{ comment.author.username }}</strong> 说:</p> <p>{{ comment.comment }}</p> </div> {% endfor %} {% else %} <p>还没有评论,快来添加第一条吧!</p> {% endif %} </div>
3. 验证关联数据是否存在
确保你已经通过后台管理页面或其他方式,创建了关联到当前Report的Comment对象,否则模板会显示“还没有评论”的提示内容。
额外可选:添加评论提交功能(如果需要)
如果想让用户在详情页直接提交评论,可以扩展视图和模板:
第一步:修改views.py添加表单上下文
from django.views.generic import DetailView from .models import Report, Comment from django import forms # 先快速定义评论表单(也可以单独放在forms.py中) class CommentForm(forms.ModelForm): class Meta: model = Comment fields = ['comment'] class ReportDetailView(LoginRequiredMixin, DetailView): model = Report template_name = 'report_detail.html' login_url = 'login' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['comment_form'] = CommentForm() return context
第二步:在模板中添加提交表单
在评论展示区域下方添加:
<!-- 评论提交表单 --> <div class="comment-form"> <h3>添加评论</h3> <form method="POST" action="{% url 'add_comment' object.id %}"> {% csrf_token %} {{ comment_form.as_p }} <button type="submit">提交评论</button> </form> </div>
第三步:添加处理表单的视图和URL
还需要创建一个处理评论提交的函数视图,并配置对应的URL(比如add_comment),这里就不展开细说了,属于扩展功能,你可以根据需求自行实现。
内容的提问来源于stack exchange,提问作者chiao
相关产品推荐
相关产品推荐

