XH_Digital_Management/common/utils/page_helper.py

61 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
def paginate_query_and_assign_numbers(request, queryset, per_page):
"""
对查询集进行分页,并为每页的结果集分配一个连续的序号。
参数:
- request: HttpRequest 对象包含从客户端接收的所有HTTP GET请求参数。
- queryset: QuerySet 对象,包含了要进行分页的数据集。
- per_page: int, 每页期望显示的条目数量。
返回:
- page: 当前页的 Page 对象。
"""
# 获取请求的页码默认第1页
page = request.GET.get('page', '1')
# 确保页码是有效的整数否则默认为第1页
page_number = int(page) if page.isdigit() else 1
# 计算当前页的第一个条目的序号
first_item_number = (page_number - 1) * per_page
# 创建 Paginator 对象实例进行分页操作
paginator = Paginator(queryset, per_page)
try:
# 获取当前页码的Page对象
page_items = paginator.page(page_number)
except PageNotAnInteger:
# 如果页码不是整数,则展示第一页,并计算当前页的第一个序号
page_items = paginator.page(1)
first_item_number = 0
except EmptyPage:
# 如果页码超出范围(即没有这么多页),则展示最后一页,并计算当前页的第一个序号
page_items = paginator.page(paginator.num_pages)
first_item_number = (paginator.num_pages - 1) * per_page
# 给每个列表对象添加序号
for index, item in enumerate(page_items):
item.number = first_item_number + index + 1
return page_items
def get_query_params_without_page(request):
"""
从请求中复制查询参数,并移除 'page' 参数。
参数:
- request: HttpRequest 对象,包含 GET 请求参数。
返回:
- url编码后的查询字符串不包含 'page' 参数。
"""
query_params = request.GET.copy() # 复制请求的查询参数
query_params.pop('page', None) # 移除 'page' 参数,如果不存在则忽略
return query_params.urlencode() # 返回 url 编码后的查询字符串