Django中这个简单通用视图中的分页工作正常,但每个页面都显示所有行,而不是该页面的行。 如何只选择给定页面所需的记录?
class ArticleList(ListView):
"""Get all articles"""
model = Article
template_name = "blog/articles.html"
paginate_by = 4
def get_context_data(self, **kwargs):
context = super(ArticleList, self).get_context_data(**kwargs)
context['articles'] = Article.objects.select_related().all()
return context
答案 0 :(得分:2)
因为您已覆盖articles
中的get_context_data
对象以返回所有内容。默认实现在那里进行分页,但是您已将其替换为非分页查询集。
相反,定义get_queryset
并在那里添加select_related
。
答案 1 :(得分:1)
以下是我最初解决问题的方法:
class ArticleList(ListView):
"""Get all articles"""
model = Article
template_name = "blog/articles.html"
paginate_by = 1
def get_context_data(self, **kwargs):
context = super(ArticleList, self).get_context_data(**kwargs)
p = Paginator(Article.objects.select_related().all(), self.paginate_by)
context['articles'] = p.page(context['page_obj'].number)
return context
然而,在每个人帮助之后,最好的方法是:
class ArticleList(ListView):
"""Get all articles"""
model = Article
template_name = "blog/articles.html"
paginate_by = 1
context_object_name = "articles"
def get_queryset(self):
return Article.objects.all().order_by('-date')
谢谢大家。