繁体   English   中英

为什么我的分页不起作用? (姜戈)

[英]Why is my pagination not working? (Django)

我一直在使用 Django-Listviews,并且我在 class 中使用了paginate_py来进行一些分页。 但它只会显示所有项目。 这是 class:

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等。 提前致谢!

编辑:新回溯: 在此处输入图像描述

在此处输入图像描述

这是有道理的,因为分页是使用.paginate_queryset(..)方法 [Django-doc]get_queryset的结果上完成的,该方法返回一个 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.paginate_queryset(
            queryset,
            self.get_paginated_by(queryset)
        )
        queries = self.request.GET.copy()
        queries.pop('page', None)
        context.update(
            filter=MyFilter,
            filtered_items=object_list,
            page=page,
            is_paginated=is_paginated,
            count=paginator.count,
            queries=queries
        )
        context['búsqueda'] = self.request.GET.get('q')
        return context

请注意,在其他页面的链接中,如果要保留过滤,则需要在请求参数中添加查询字符串部分,例如:

<a href="?page=2&{{ queries.urlencode|safe }}">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM