2016-11-27 22 views
0

Django docs显示如何使用基于函数的视图返回分页查询集的最后一页,方法是捕获EmptyPage异常。使用ListView显示分页结果的最后一页而不是404使用ListView

使用通用基于类的视图实现同一事物的最简单方法是什么,例如ListView

我首先想到MultipleObjectMixinallow_empty设置会做我所需要的,但检查代码表明它只防止404错误,如果查询集中有零个对象,而不是请求页面上的零对象。

两个选项似乎是:

  1. 子类ListView并覆盖paginate_queryset(来自MultipleObjectMixin继承),或
  2. 子类Paginator并重写validate_number,并设置paginator_class到视图的子类。

有没有更好的方法来实现这一目标?

回答

0

下面是选项2的样子:

from django.core.paginator import EmptyPage, Paginator 
from django.views.generic import ListView 

class SafePaginator(Paginator): 
    def validate_number(self, number): 
     try: 
      return super(SafePaginator, self).validate_number(number) 
     except EmptyPage: 
      if number > 1: 
       return self.num_pages 
      else: 
       raise 

class MyView(ListView): 
    paginator_class = SafePaginator 
    paginate_by = 25 

    [...] 

这似乎是目前最好的选择我。