如何在 django 模板中显示评论及其回复?

Posted

技术标签:

【中文标题】如何在 django 模板中显示评论及其回复?【英文标题】:How to display comments and it's replies in django templates? 【发布时间】:2018-02-25 09:10:48 【问题描述】:

我想在模板中显示评论和回复。但是有一个问题,每个回复都可能有其他回复。下面的 sn-p 是我的CommentCommentReply 模型:

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 模板中显示评论及其回复?的主要内容,如果未能解决你的问题,请参考以下文章

Django ORM - 检索数据时出错 -

如何在django模板的html表中显示多个对象数据

Django 多外键导航

如何在我的 Django 应用程序的“评论”视图中修复此错误?

Django使用Ajax实现页面无刷新评论回复功能

我如何在 Django 中查询评论