Django 3.2智能分页get_elided_page_range方法初尝!

Django 3.2引入了get_elided_page_range方法,改善了分页体验。本文通过实例解析该方法的使用,展示如何在视图和模板中实现智能分页,减少大量页码显示,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django 3.2版本本月正式发布了, 其中一个重要变化就是新增了智能分页get_elided_page_range方法。Django 3.2之前的Paginator类将连续输出所有页码,非常不智能。本文将演示如何使用get_elided_page_range方法实现智能分页。

get_elided_page_range方法解读

改方法接收3个参数,第一个参数number为当前页码数, on_each_side为当前页码左右两边的页数,on_ends为首尾页码范围。

Paginator.get_elided_page_range(number, on_each_side=3, on_ends=2)

如果当前页码为第10页,使用该方法将输出如下页码范围(page_range)。10左右两边各有3页,首尾各有2页,其余页码号码用...代替。将page_range这个变量传递到前端模板进行遍历即可实现智能分页。

[1, 2, '…', 7, 8, 9, 10, 11, 12, 13, '…', 49, 50]

Django 3.2之前版本非智能分页

我们有个House模型。为了模拟总页数非常多的情形,我们将每页记录数量设为1条。视图函数如下所示:

# Filter houses
def house_filter(request):
    qs = House.objects.all()
    paginator = Paginator(qs, 1) # 每页1条记录
    page = request.GET.get('page', 1) # 获取当前page页码,默认为1
    try:
        page_obj = paginator.page(page) # 分页
    except PageNotAnInteger:
        page_obj = paginator.page(1) 
    except EmptyPage:
        page_obj = paginator.page(paginator.num_pages)
    is_paginated = True if paginator.num_pages > 1 else False


    context = {'page_obj': page_obj, 'paginator': paginator,
               'is_paginated': is_paginated,}
    return render(request, 'house/house_index.html', context)


假如前端模板样式用bootstrap 4,对应分页的前端模板如下所示:

# house/house_index.html
{% block content %}
         <div class="table-responsive">
             <table class="table table-striped table-hover">
                 <thead>
                 <tr>
                   
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值