在ListView中对paginate_by使用get_context_Data时,页面显示所有行

时间:2016-01-10 22:30:37

标签: python django django-generic-views

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

2 个答案:

答案 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')

谢谢大家。