Как сделать постраничный вывод с регулируемым количеством элементов на странице: 5, 10, 15 в Django?
views.py
. . .
from .models import Items
class HomeListView(ListView):
template_name = 'home.html'
model = Items
paginate_by = 10 # по умолчанию сделать 10, но добавить возможность
# регулировать кол-во элементов на странице
. . .
В шаблоне есть форма в которой пользователь может выбрать количество элементов на странице (paginate_by). Как сделать так, чтобы страница перезагружалась и выполнялась пагинация по полученному значению?
Вы можете переопредилить функцию get_paginate_by
, чтобы получить query
параметр. Вот простой пример.
class HomeListView(ListView):
template_name = 'home.html'
model = Items
paginate_by = 10
def get_paginate_by(self, queryset):
"""
Paginate by specified value in querystring, or use default class property value.
"""
return self.request.GET.get('paginate_by', self.paginate_by)
Затем в html добавить раскрывающийся список, где пользователь может выбрать количество элементов для страницы.
<form action="." method="get">
<select name="paginate_by">
<option>25</option>
<option>50</option>
<option>75</option>
<option>100</option>
</select>
</form>
Можно добавить javascript, чтобы сделать автоматическую отправку.