【发布时间】:2021-02-13 21:42:46
【问题描述】:
我在 django 中有这段代码,对于每个 django 注释,都执行 for 循环内的任何操作:
{% for comment in post.comments.all %}
{% endfor %}
这段代码,对于每条评论,都会执行 for 中的任何内容。要计算我使用的 cmets:
{{ post.comments.count }}
如果您需要,这是我的评论模型:
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 个 cmets,并且只运行 for 循环 3 次或更少。 (请注意,我想在模板中完成所有这些工作,而不是在 views.py 文件中)
【问题讨论】:
-
你能分享你的评论模型吗? cmets是否默认按发布日期排序?
-
当然,我会分享它。是的,这些 cmets 是按发布日期排序的。
-
您应该在视图中执行此操作。这不是高性能的。对于快速模板解决方案,您可以尝试
{% for comment in post.comments.all|slice:":3" %} -
@hansTheFranz,是的,我知道我可能应该在 views.py 文件中执行此操作,但我有几个原因无法将其放入 views 文件中。
标签: python django for-loop if-statement