如何在 django 模板中显示评论及其回复?
Posted
技术标签:
【中文标题】如何在 django 模板中显示评论及其回复?【英文标题】:How to display comments and it's replies in django templates? 【发布时间】:2018-02-25 09:10:48 【问题描述】:我想在模板中显示评论和回复。但是有一个问题,每个回复都可能有其他回复。下面的 sn-p 是我的Comment
和CommentReply
模型:
class Comment(models.Model):
author = models.ForeignKey(Profile, related_name="c_sender", on_delete=models.CASCADE, unique=False)
comment = models.CharField(max_length=500, unique=False)
created_date = models.DateTimeField(auto_now_add=True)
edited_date = models.DateTimeField(blank=True, null=True)
def __str__(self):
return self.comment
@property
def replys(self):
return CommentReply.objects.filter(comment_id=self)
class CommentReply(models.Model):
comment_id = models.ForeignKey(Comment, related_name='sender', on_delete=models.CASCADE)
reply_id = models.ForeignKey(Comment, related_name='reply', on_delete=models.CASCADE)
更新: 我还有一个 WorksComments 模型,每个与 Work 模型相关的 cmets 都保存在那里。
class WorkComment(models.Model):
work_id = models.ForeignKey(Work, on_delete=models.CASCADE, related_name='e_exercise', unique=False)
comment_id = models.ForeignKey(Comment, related_name='e_comment', unique=False)
下面的sn-p是我的看法:
comments = WorkComment.objects.filter(work_id=work).all()
return render(request, 'work.html', 'comments': comments)
我的问题是如何显示 cmets 以及它下面的回复,每个回复可能还有一些我也想显示的其他回复。
【问题讨论】:
你的视图是什么样的? 我更新了它并添加了视图。 【参考方案1】:首先要做的事……把它放在你的书签里; https://ccbv.co.uk/
我怀疑您在这里需要Detail View 以显示实例的详细信息。
设置网址...
from django.conf.urls import url
from work.views import WorkDetailView
urlpatterns = [
url(r'^(?P<id>[-\d]+)/$', WorkDetailView.as_view(), name='work-detail'),
]
还有一个观点;
from django.views.generic.detail import DetailView
from django.utils import timezone
from work.models import Work
class WorkDetailView(DetailView):
model = Work
def get_context_data(self, **kwargs):
context = super(WorkDetailView, self).get_context_data(**kwargs)
context['comments'] = WorkComment.objects.filter(work_id=self.object.id).all()
return context
那么一个简单的视图可能是work/work_detail.html
:
<h1> object.title </h1>
<p> object.content </p>
<h2>Comments</h2>
% for comment in comments %
comment
% endfor %
【讨论】:
它不是一个单独的页面。我想在work.html
页面的侧面显示 cmets。我的视图继承自视图。如何在继承自 View 的 Class_Based 视图中显示它们?谢谢
@msln DetailView
也继承自 View
。上面可以渲染到work.html
,然后将注释循环放在侧面部分的标记中。听起来我的例子是你已经得到的,但你只发布了获取 cmets 并呈现响应的行,所以我给出了一个完整的例子。以上是关于如何在 django 模板中显示评论及其回复?的主要内容,如果未能解决你的问题,请参考以下文章