django - 查询集的 Django 分页
问题描述
我是pagination
基于过滤实现的query
,在单击页码之前它可以正常工作,但在单击页码后它会显示所有对象,包括未过滤的对象。升级到最新版本的 django 后开始发生。
fitered objects
和4
给定的2 items per page paginator
分页应该停止, Page number 2
但它显示了一个新的分页器,其中包含所有对象,即使是未过滤的对象。下面是一些片段。任何帮助将不胜感激。
视图.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)
模板.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>
解决方案
在此链接上找到解决方案。
<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 %}
推荐阅读
- c# - EF Core 3 中具有一对多关系的拥有实体
- c# - EF Core 迁移与 SQLite 数据库:无法创建类型的对象
- android - 等到 lateinit 被分配
- javascript - 使用 Webpack 通过 React App 将 json 作为 URI 加载
- awk - 匹配两个文件并保留重复项
- java - Spring jms 在处理和确认之前将消息缓冲成批处理
- python - 如何将句子放在顶部?
- entity-framework - 如何使用 Azure 存储和实体框架上传文件
- javascript - 如何将查询 graphql 转换为 json 对象?
- python - 如何在 TF2.0 中用 GradientTape 替换 Keras 的 gradients() 函数?