我为博客中的帖子使用了详细视图,每个帖子都有评论,因此我想对它们进行分页,但是我不知道该怎么做,因为我请求了帖子模型。我知道如何在功能视图中执行此操作,但在详细视图中不行...
SLASH
如何在for循环中对注释进行分页?
答案 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
对象相关的属性集。
话虽如此,也许这更像是评论上的ListView
或FormView
,因为您包括了Form
来评论。