Django 如何在嵌套评论系统中显示三级评论

时间:2021-03-03 16:02:40

标签: python django django-models django-views django-comments

我在搭建一个嵌套的Django评论系统。思路很简单,所有属于同一个根注释的子注释都会嵌套在根注释下,不管子注释属于哪一层或哪一层。

Root comment
  A reply to Root
  B reply to A
  C reply to B
  D reply to C
  E reply to A

model.py:

class Comment(models.Model):
    """

    评论表

    """
    nid = models.AutoField(primary_key=True)
    news = models.ForeignKey(verbose_name='评论文章', to='News',to_field='id',on_delete=models.CASCADE)
    user = models.ForeignKey(verbose_name='评论者', to='User',to_field='id',on_delete=models.CASCADE)
    content = models.CharField(verbose_name='评论内容', max_length=255)
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    parent_comment = models.ForeignKey('self', null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.content

view.py:

def newsDetailView(request, news_pk):
   ......other code......
    comments_list = Comment.objects.filter(news_id=news_pk).order_by('-nid')
    return render(request, "news/pages/index-inner.html", {
        'comments_list': comments_list,
    })

模板:

    {% for comment in comments_list %} 
    
    {% if comment.comment_set.all and not comment.parent_comment %}
            
    <div class='root-sub-group'>
    <div class="root-comment" >
    {{comment.content}}
    </div>
    
   {% for reply in comment.comment_set.all %}
    
    <div class="sub-comment">
    {{reply.content}}
    <div/>
    
    {% endfor %}
            
</div>
    
    {% endif %}
    
    
    <!--now if the comments doesn't has both sub comments and parent comment then it should be a single root comment-->
    
    {% if not comment.comment_set.all and not comment.parent_comment %}
    <div class="single-root" >
    {{comment.content}}
    </div>
    
    
    {% endif %}
    
    {% endfor %}
    

我的问题是它只显示第二级的评论,第三级不显示。

Root comment
  A reply to Root
  F reply to Root

有朋友可以帮忙吗?我知道这有点难。谢谢!

0 个答案:

没有答案