【发布时间】:2021-05-02 13:00:48
【问题描述】:
我正在基于过滤的query 实现pagination,它在单击页码之前可以正常工作,但在单击页码后它会显示所有对象,包括未过滤的对象。
升级到最新版本的 django 后开始发生。
fitered objects 是4 并且给定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