Почему моя нумерация страниц не работает? (Django) - PullRequest
0 голосов
/ 08 апреля 2020

Я работал с Django -Listviews и использовал paginate_py в классе, чтобы начать нумерацию страниц. Но он просто покажет все предметы. Это класс:

class PostListView(ListView):
    model = publicaciones
    template_name = 'store/search.html'
    context_object_name = 'queryset'
    ordering = ['Promocionado']
    paginate_by = 2

    def get_queryset(self):
        qs = self.model.objects.all().order_by('id')
        search = self.request.GET.get('q')

        if search:
            qs = qs.filter(Título__icontains=search)

        return qs

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        MyFilter = PubFilters(self.request.GET, queryset=self.get_queryset())
        context['filter'] = MyFilter
        context['filtered_items'] = MyFilter.qs
        context['count'] = self.get_queryset().count()
        context['búsqueda'] = self.request.GET.get('q')
        return context

Скажите, пожалуйста, нужно ли мне публиковать что-то еще, например, filters.py и так далее. Заранее спасибо!

РЕДАКТИРОВАТЬ: Новый трассировки: enter image description here

enter image description here

1 Ответ

2 голосов
/ 08 апреля 2020

Это имеет смысл, поскольку разбиение на страницы выполняется по результату get_queryset с помощью метода .paginate_queryset(..) [Django -doc] , который возвращает 4-кортеж : (paginator, page, object_list, is_paginated).

from django.http import QueryDict

class PostListView(ListView):

    # …

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        queryset = self.get_queryset()
        MyFilter = PubFilters(self.request.GET, queryset=queryset)
        paginator, page, object_list, is_paginated = self.<b>paginate_queryset(</b>
            queryset,
            self.get_paginated_by(queryset)
        <b>)</b>
        queries = self.request.GET.copy()
        <b>queries.pop('page', None)</b>
        context.update(
            filter=MyFilter,
            filtered_items=object_list,
            page=page,
            is_paginated=is_paginated,
            count=paginator.count,
            <b>queries=queries</b>
        )
        context['búsqueda'] = self.request.GET.get('q')
        return context

Обратите внимание, что в ссылках на другие страницы, если вы хотите сохранить фильтрацию, вам нужно будет добавить часть строки запроса в параметры запроса, что-то вроде:

<a href="?page=2<b>&{{ queries.urlencode|safe }}</b>">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...