[英]Is it possible to filter “Related field” in Django Template?
我正在使用 Django 開發 Instagram 克隆。 我想顯示每個帖子的最新兩條評論。
截至目前,我只能使用以下代碼顯示所有評論
主頁.html
{% for comment in post.comments.all %}
<p>{{ comment.user.username }}: {{ comment.description }}</p>
{% endfor %}
我的模型
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post_linked = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
description = models.CharField(max_length=500)
comment_posted_on = models.DateTimeField(default=timezone.now)
def __str__(self):
return "Comment by {} on {}".format(self.user.username, self.post_linked.caption)
有什么方法可以讓我只顯示每個帖子的最新兩條評論?
django 模板標簽“切片”將在此處為您提供幫助: https://docs.djangoproject.com/en/3.1/ref/templates/builtins/#slice
使用您的代碼:
{% for comment in post.comments.all|slice:":2" %}
<p>{{ comment.user.username }}: {{ comment.description }}</p>
{% endfor %}
這假設您的 model 的評論是按最近排序的。 您可能需要將其添加到 class Meta 以獲取評論 model。
您應該在視圖中創建過濾評論的集合,然后將其包含在模板的上下文中。 Django 的模板理念是使它們盡可能簡單,這通常意味着沒有 function 調用(模板標簽和過濾器除外)。
為了讓事情更有效率,你應該使用prefetch_related
和Prefetch
。 查看有關它們的文檔以獲得最佳參考。
from django.db.models import Prefetch
posts = Post.objects.all().prefetch_related(
Prefetch(
'comments',
Comment.objects.select_related('user').order_by('-comment_posted_on')[:2],
to_attr='latest_comments',
)
)
然后在您的模板中:
{% for comment in post.latest_comments %}
<p>{{ comment.user.username }}: {{ comment.description }}</p>
{% endfor %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.