[英]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.