分页详细视图

时间:2019-02-17 12:26:14

标签: python django web django-models pagination

我为博客中的帖子使用了详细视图,每个帖子都有评论,因此我想对它们进行分页,但是我不知道该怎么做,因为我请求了帖子模型。我知道如何在功能视图中执行此操作,但在详细视图中不行...

SLASH

如何在for循环中对注释进行分页?

1 个答案:

答案 0 :(得分:2)

几乎完全相同:

from django.core.paginator import Paginator

class PostDetailView(DetailView):
    model = Post

    def get_context_data(self, **kwargs):
        context = super(PostDetailView, self).get_context_data(**kwargs)
        page = self.request.GET.get('page')
        comments = Paginator(self.object.comment_set.all(), 25)
        context['comments'] = comments.get_page(page)
        context['comments_number'] = self.object.comment_set.count()
        context['form'] = CommentForm()
        return context

    # ...

因此,我们从page参数中获取了self.request.GET参数,然后我们制作了Paginator并对其进行了分页。您可能还应该根据某个字段排序注释。现在,评论可以按任何顺序出现,因此下一页可以包含上一页中出现的评论,等等。

comments变量因此是一个分页对象,您可以像在基于函数的视图中一样呈现它。

请注意,您可以使用comment_set(或者,如果您设置另一个related_name,则使用该名称)来访问与Post对象相关的属性集。

话虽如此,也许这更像是评论上的ListViewFormView,因为您包括了Form来评论。