繁体   English   中英

Django 模板显示最新 3 条评论

[英]Django Templates Display The Latest 3 Comments

我在 django 中有这段代码,对于每个 django 注释,执行 for 循环内的任何内容:

{% for comment in post.comments.all %}

{% endfor %}

这段代码,对于每条评论,都执行 for 中的任何内容。 要计算我使用的评论:

{{ post.comments.count }}

这是我的评论 model 以防您需要它:

class Comment(models.Model):
    post = models.ForeignKey('blog.Post', on_delete=models.CASCADE, related_name='comments')
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    text = models.TextField(default='')
    created_date = models.DateTimeField(default=timezone.now)
    anonymous = models.BooleanField(default=False)

    def approve(self):
        self.approved_comment = True
        self.save()

    def __str__(self):
        return self.text

现在,我想将这些组合在一起,所以它只显示最新的 3 条评论,并且只运行 for 循环 3 次或更少。 (请注意,我想在模板中完成所有这些工作,而不是在 views.py 文件中)

默认情况下,您可以按创建日期对评论进行排序:

from django.conf import settings

class Comment(models.Model):
    post = models.ForeignKey(
        'blog.Post',
        on_delete=models.CASCADE,
        related_name='comments'
    )
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )
    text = models.TextField(default='')
    created_date = models.DateTimeField(auto_now_add=True)
    anonymous = models.BooleanField(default=False)

    class Meta:
        ordering = ['-created_date']

    # …

然后您可以使用|slice模板过滤器 [Django-doc]对查询集进行切片:

{% for comment in post.comments.all|slice:':3' %}

{% endfor %}

注意:通常最好使用settings.AUTH_USER_MODEL [Django-doc]来引用用户 model,而不是直接使用User model [Django-doc] 有关更多信息,您可以查看参考文档的User model部分

然而,最好预取视图中的元素,其中:

Post.objects.prefetch_related('comments')

这将批量获取评论,这比按照Post运行查询更有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM