Как сделать постраничный вывод с регулируемым количеством элементов на странице: 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, чтобы сделать автоматическую отправку.

Вернуться на верх