簡體   English   中英

是否可以在 Django 模板中過濾“相關字段”?

[英]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_relatedPrefetch 查看有關它們的文檔以獲得最佳參考

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM