Python:Django3x分页分个明白

from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage, InvalidPage


def page_results(contacts, number, per_page):
    """
    分页函数
    :param contacts:列表 或 models list
    :param number:当前页
    :param per_page:每页多少条数量
    :return:
    """
    number = number if number else 1
    per_page = per_page if per_page else 10
    per_page = per_page if type(per_page) is int else int(per_page)
    paginator = Paginator(contacts, per_page)
    kwargs = {
        'per_page': 0,
        'has_previous': 0,  # 0 False ,1 True
        'has_next': 0,  # 0 False ,1 True
        'previous_page_number': 0,
        'next_page_number': 0,
        'number': 0,
        'num_pages': 0,
        'count': 0,
        'has_other_pages': 0,
        'start_index': 0,
        'end_index': 0,

    }

    try:
        number = number if type(number) is int else int(number)
        contacts = paginator.page(number)
        # TODO: 开始捕获异常
    except PageNotAnInteger:
        contacts = paginator.page(1)
    except InvalidPage:
        # 如果请求的页数不存在, 重定向页面
        contacts = paginator.page(1)
    except EmptyPage:
        # 如果请求的页数不在合法的页数范围内,返回结果的最后一页。
        contacts = paginator.page(paginator.num_pages)
    per_page = contacts.paginator.per_page # 每页多少条数量
    number = contacts.number  # 当前页
    num_pages = contacts.paginator.num_pages  # 总页数
    count = contacts.paginator.count  # 总条数
    kwargs['per_page'] = per_page
    kwargs['number'] = number
    kwargs['num_pages'] = num_pages
    kwargs['count'] = count
    if number > 1:
        kwargs['has_previous'] = 1
        kwargs['previous_page_number'] = number - 1

    if number < num_pages:
        kwargs['has_next'] = 1
        kwargs['next_page_number'] = number + 1

    if number > 1 or number < num_pages:
        kwargs['has_other_pages'] = 1

    if count == 0:
        kwargs['start_index'] = 0
    else:
        kwargs['start_index'] = (per_page * (number - 1)) + 1

    if number == num_pages:
        kwargs['end_index'] = count
    else:
        kwargs['end_index'] = number * per_page

    return contacts, kwargs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千码君2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值