【问题标题】:Django Pagination by Queryset查询集的 Django 分页
【发布时间】:2021-05-02 13:00:48
【问题描述】:

我正在基于过滤的query 实现pagination,它在单击页码之前可以正常工作,但在单击页码后它会显示所有对象,包括未过滤的对象。 升级到最新版本的 django 后开始发生。

点击前分页。

点击第2页后的分页。

fitered objects4 并且给定2 items per page paginator 分页应该在Page number 2 处停止,但它显示了一个新的分页器,其中包含所有对象,即使是未过滤的对象。 下面是一些sn-ps。任何帮助将不胜感激。

Views.py

def searchPropertyListView(request):
 city = City.objects.all().annotate(
     num_property=Count("property")).order_by("-num_property")
 categories = Category.objects.all()
 purposes = Purpose.objects.all()

 featured = list(Property.objects.filter(featured=True))
 shuffle(featured)

 querySet = Property.objects.all()
 city_or_neighborhood = request.GET.get('city_or_neighborhood')
 category = request.GET.get('category')
 purpose = request.GET.get('purpose')

 if city_or_neighborhood != '' and city_or_neighborhood is not None:
     querySet = querySet.filter(Q(city__title__icontains=city_or_neighborhood)
                               | Q(neighborhood__title__icontains=city_or_neighborhood)
                               ).distinct()
 elif category != '' and category is not None:
     querySet = querySet.filter(category__title=category)

 elif purpose != '' and purpose is not None:
     querySet = querySet.filter(purpose__title=purpose)

 paginator = Paginator(querySet, 2)

 page = request.GET.get('page')

 try:
     querySet = paginator.get_page(page)
 except PageNotAnInteger:
     querySet = paginator.get_page(1)
 except EmptyPage:
     querySet = paginator.get_page(paginator.num_pages)

 context = {
     'city': city,
     'featured': featured,
     'querySet': querySet,
     'categories': categories,
     'purposes': purposes,
 }

 return render(request, 'search/search_list.html', context)

Template.html

            <nav class="mt-5">
               {% if querySet.has_other_pages %}
                <ul class="pagination justify-content-center">
                   {% if querySet.has_previous %}
                    <li class="page-item">
                        <a class="page-link" href="?page={{querySet.previous_page_number}}" tabindex="-1"><i class="mdi mdi-chevron-left"></i></a>
                    </li>
                   {% else %}
                    <li class="page-item disabled">
                        <a class="page-link" tabindex="-1"><i class="mdi mdi-chevron-left"></i></a>
                    </li>
                   {% endif %}
            
                   {% for pages in querySet.paginator.page_range %}
                    {% if querySet.number == pages %}
                     <li class="page-item active"><a class="page-link" style="height: 100% !important">{{pages}}</a></li>
                    {% else %}
                     <li class="page-item"><a class="page-link " style="height: 100% !important" href="?page={{pages}}">{{pages}}</a></li>
                    {% endif %}
                   {% endfor %}
            
                   {% if querySet.has_next %}
                    <li class="page-item">
                        <a class="page-link" href="?page={{ querySet.next_page_number }}"><i class="mdi mdi-chevron-right"></i></a>
                    </li>
                   {% else %}
                    <li class="page-item disabled">
                        <a class="page-link" href="#"><i class="mdi mdi-chevron-right"></i></a>
                    </li>
                   {% endif %}
                </ul>
                {% endif %}
            </nav>

【问题讨论】:

    标签: django django-models django-views django-templates


    【解决方案1】:

    link.找到解决方案

    <nav class="mt-5">
    {% if paginate.has_other_pages %}
    <ul class="pagination justify-content-center">
        {% if paginate.has_previous %}
        <li class="page-item">
            <a class="page-link" href="{{ request.get_full_path }}&page={{paginate.previous_page_number}}" tabindex="-1"><i class="mdi mdi-chevron-left"></i></a>
        </li>
    
        {% else %}
        <li class="page-item disabled">
            <a class="page-link" tabindex="-1"><i class="mdi mdi-chevron-left"></i></a>
        </li>
        {% endif %}
    
         {% for pages in paginate.paginator.page_range %}
          {% if paginate.number == pages %}
           <li class="page-item active"><a class="page-link" style="height: 100% !important">{{pages}}</a></li>
          {% else %}
           <li class="page-item"><a class="page-link " style="height: 100% !important" href="{{ request.get_full_path }}&page={{pages}}">{{pages}}</a></li>
          {% endif %}
         {% endfor %}
    
        {% if paginate.has_next %}
        <li class="page-item">
            <a class="page-link" href="{{ request.get_full_path }}&page={{ paginate.next_page_number }} ">
            <i class="mdi mdi-chevron-right"></i></a>
        </li>
        {% else %}
    
        <li class="page-item disabled">
            <a class="page-link" href="#"><i class="mdi mdi-chevron-right"></i></a>
        </li>
        {% endif %}
    </ul>
    {% endif %}
    

    【讨论】:

      猜你喜欢
      • 2011-03-22
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 2022-12-18
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      相关资源
      最近更新 更多