17python

Django 数据翻页的优化

Django 数据翻页的优化

之前利用Django搭建的博客,内容越写越多,导致翻页遗留下来的问题开始显现了,具体问题如下:

我预想的效果是这样的

Django翻页Paginator

对于经常使用Django的朋友来说,翻页应该是家常便饭了,先导入相关包和模块

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger  # 翻页相关模块

关于Paginator具体使用请参考官方的文档介绍,其实很简单,复制过来就可以使用,这里不在重复阐述,我们这里要优化的是上边的结果。

需求分析

假设有几百条数据,分页也有几十页,通过paginator.num_pages这个属性可以返回一个list,包含了当前数据的所有分页列表书,类似下边的结果

[i for i in range(50)]

若是在视图中调用paginator.num_pages,则会渲染出1-50所有的页码数字,这样来说,我们自己创建一个方法,改变页码显示的达到我们的预期需求即可。

实现优化

我们需要三个参数:当前页码(page),显示页码的最大数(maxpage),页码总数(num_pages)。

具体能出现的情况我都代码中注释了,当然这个优化并不是十分完美,希望大家多提意见!

我们来实现这个方法:

def pagesHelp(page,num_pages,maxpage):
    '''
    Paginator Django数据分页优化
    使数据分页列表处显示规定的页数
    :param page: 当前页码
    :param num_pages: 总页数
    :param maxpage: 列表处最多显示的页数
    :return:
    '''

    if page is None:#首页时page=None
        p=1
    else:
        p = int(page)
    # print(num_pages,p,maxpage)
    offset = num_pages-p
    if num_pages > maxpage and offset <= maxpage and p>= maxpage:
        #假设100页 100-98=2,页尾处理
        # 结果小于规定数但是当前页大于规定页数
        # print("结果小于规定数但是当前页大于规定页数",[i + 1 for i in range(num_pages - maxpage, num_pages)])
        return [i + 1 for i in range(num_pages - maxpage, num_pages)]

    elif num_pages > maxpage and offset >= maxpage and p <= maxpage:
        #假设100页 100-2=98,页头
        # 结果小于规定数但是当前页大于规定页数
        # print("结果小于规定数但是当前页大于规定页数",[i + 1 for i in range(maxpage)])
        return [i + 1 for i in range(maxpage)]

    elif num_pages <= maxpage:
        #假设3页  3<6,总页数很少,少于规定页数
        # 当前页码数小于规定数
        # print("当前页码数小于规定数",[i + 1 for i in range(num_pages)])
        return [i + 1 for i in range(num_pages)]
    else:
        # 正常页数分配
        # print("正常页数分配",[i + 1 for i in range(p - int(maxpage / 2), p + int(maxpage / 2))])
        return [i + 1 for i in range(p - int(maxpage / 2), p + int(maxpage / 2))]

这样,我们设置一个变量,然后传递到模板那里,替换掉{% for p in contacts.paginator.page_range %}处中的contacts.paginator.page_range就可以以实现Django翻页的优化了。

相关标签
About Me
J.sky
你那么喜欢看“干货”,是因为你根本不想下什么功夫;你自以为的极限,其实只是别人的起点。
Category
标签云
站点统计

本站现有博文99篇,共被浏览93835

据官网介绍,2020年4月Python2.7将不会被维护!距离Python2.7停止维护还有392天!

热门文章
文章归档
回到顶部