2016-11-27 8 views
0

Django docsは、EmptyPageの例外をキャッチして、関数ベースのビューを使用してページ付けされたクエリセットの最後のページを返す方法を示します。ListViewを使用して404の代わりにページ区切りの最終ページを表示

一般的なクラスベースのビューを使用して同じことを達成する最も簡単な方法は何ですか、たとえばListView

私は最初にMultipleObjectMixinの設定がMultipleObjectMixinになると思っていましたが、コードを調べると、要求されたページのゼロオブジェクトではなく、オブジェクトがゼロセットに含まれていると404エラーだけが防止されます。

つのオプションがあるように見える:

  1. サブクラスListView及び(MultipleObjectMixinから継承)paginate_querysetをオーバーライド、または
  2. サブクラスPaginatorvalidate_numberをオーバーライドし、ビュー内のサブクラスにpaginator_classを設定します。

これを実現する方法はありますか?これは、現時点では私には最良の選択肢のように思える

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 

    [...] 

:ここ

答えて

0

は、オプション2は次のようになります。

関連する問題