オブジェクトのリストと 2 つのボタンを含むページがあります:show moreとshow all. オブジェクトは AJAX によって読み込まれItemsListView
、ページ番号に送信されます。
class ItemsListView(ListView):
paginate_by = 2
ページの初期化時に、JS 変数current_page
が に設定され1
、JS は表示する AJAX 要求を送信ItemsListView
し、最初のページの 2 つのオブジェクトを取得してレンダリングします。
ユーザーがshow moreボタンをクリックすると、current_page
値が増加し、JS は次のページのオブジェクトを要求します。
show all今度はボタンを実装したいと思います。例えば、
次のオブジェクトのリストがある場合: [1, 2, 3, 4, 5, 6, 7, 8, 9]
、ページにオブジェクトが読み込まれ、1
レンダリング2
されます。ユーザーが をクリックすると、オブジェクトとshow moreがレンダリングされます。ユーザーが をクリックすると、オブジェクト、、、およびがレンダリングされます。3
4
show all5
6
7
8
9
paginate_orphans
私は自分の見解で動的に変更しました:
class ItemsListView(ListView):
paginate_by = 2
paginate_orphans = 0
def get_paginate_orphans(self):
show_all = json.loads(self.request.GET.get('show_all', 'false'))
page_kwarg = self.page_kwarg
page = self.kwargs.get(page_kwarg) or self.request.GET.get(page_kwarg) or 1
if show_all:
return self.get_queryset().count() - (int(page) - 1) * 2
return self.paginate_orphans
うまくいきましたが、この問題を解決するためのよりエレガントなアプローチがあるのではないかと思います。