0
Django docsは、EmptyPage
の例外をキャッチして、関数ベースのビューを使用してページ付けされたクエリセットの最後のページを返す方法を示します。ListViewを使用して404の代わりにページ区切りの最終ページを表示
一般的なクラスベースのビューを使用して同じことを達成する最も簡単な方法は何ですか、たとえばListView
?
私は最初にMultipleObjectMixin
の設定がMultipleObjectMixin
になると思っていましたが、コードを調べると、要求されたページのゼロオブジェクトではなく、オブジェクトがゼロセットに含まれていると404エラーだけが防止されます。
つのオプションがあるように見える:
- サブクラス
ListView
及び(MultipleObjectMixin
から継承)paginate_queryset
をオーバーライド、または - サブクラス
Paginator
とvalidate_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
[...]
:ここ