Sergiy_Hanzhela
@Sergiy_Hanzhela
Начинающий разработчик!

Настройка пагинации в django проекте?

Привет!
Подскажите пожалуйста как правильно организовать пагинацию в django проекте, чтоббыла возможность со стороны клиента задавать желаемое колличество жлементов на странице
class BaseProductsList(generic.ListView):

    context_object_name = 'products'
    template_name = 'product.html'

    def get_context_data(self, **kwargs):
        context = super(BaseProductsList, self).get_context_data()
        context['categories'] = Category.objects.prefetch_related('subcategory').all().order_by('name')
        return context

    def get_queryset(self):
        qs = Product.objects.filter(available=1)
        return qs

    def get(self, request, **kwargs):
        self.paginate_by = self.request.GET.get('show', 8)
        return super(BaseProductsList, self).get(request, **kwargs)

и элемент на стороне клиента
<select id="input-limit" class="form-control">
              <option value="4" selected="selected">4</option>
              <option value="8">8</option>
              <option value="25">25</option>
            </select>

во вьюшке пытался переопределить метод get и вытаскивать из запроса, значение удалось передать ajax-ом ошибки нет но и колличество не меняется!
Подскажите как правильно это сделать?
  • Вопрос задан
  • 696 просмотров
Решения вопроса 1
sim3x
@sim3x
https://github.com/django/django/blob/3c447b108ac7...

# 

    def get_paginate_by(self, queryset):
        """
        Get the number of items to paginate by, or ``None`` for no pagination.
        """
        try:
            self.paginate_by = int(
               self.request.GET.get('paginate_by', self.paginate_by))
        except ValueError:
            logger.error('Some stupid person use not int for paginate_by')

        return self.paginate_by


<form method="get">
  <select id="input-limit" name="paginate_by" class="form-control">
    <option value="4" selected="selected">4</option>
    <option value="8">8</option>
    <option value="25">25</option>
  </select>
  <button type="submit">Paginate by</button>
</form>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы