python如何实现数据分页。这里有你想要的答案

分页及优化

先思考一个问题,现在假设已知有100页数据,当前是第1页,要得出1-10的页码数,而当前如果是第50页,则要输出46-55的页码数

def pageshow(count,p):
    '''
        count 总页数,p  当前页
        begin 开始页 
        end 结束页
    '''
    # 开始页
    begin = p-4
    # 结束页
    end = p+5
    # 判断如果当前页 小于5
    if p < 5:
        # 则开始页为1
        begin = 1
        # 结束页为10
        end = 10
    # 当前页在最后五页之内
    if p > count-5:
        # 则开始页为总页数-9
        begin = count - 9
        # 结束页为总页数
        end = count
    # 判断如果开始页 小于等于 0,则开始页为1
    if begin <= 0:
        begin = 1

    s = ''
    for x in range(begin,end+1):
        print(x)


pageshow(100,50)

1,自定义过滤器

在当前应用目录下创建templatetags目录和pagetag.py文件,

可以在模板中使用{ % load pagetag % }加载

注意:templatetags目录名不能更改,pagetag.py文件可以自定义,但对应的在模板中加载时也需要更改名字

templatetags
    ├── pagetag.py
    ----------------pagetag.py-------------------------
    from django import template
    register = template.Library()

    # 自定义页面优化显示标签
    @register.simple_tag
    def PageShow(count,request):
        # 当前页码数,默认为1
        p = int(request.GET.get('p',1))
        begin = p - 4
        end = p + 5
		# 当前页在最后五页之内
        if p > count-5:
            begin = count - 9
            end = count
		# 当前页在前五页之内
        if p < 5:
            begin = 1
            end = 10
		#总页数少于十页
        if count < 10:
            begin = 1
            end = count

        # 获取当前请求的url
        url = request.path
        # 获取当前请求中的参数 
        # 去除参数中的p
        args = ''
        for k,v in request.GET.items():
            if k != 'p':
                args += '&'+k+'='+v
        s = ''
        # 首页
        s += '
  • 首页
  • '
    .format(v=1,url=url,args=args) # 判断上一页 if p == 1: s += '
  • 上一页
  • '
    .format(v=1,url=url,args=args) else: s += '
  • 上一页
  • '
    .format(v=p-1,url=url,args=args) # 循环页码数 for x in range(begin,end+1): if x == p: s += '
  • {v}
  • '
    .format(v=x,url=url,args=args) else: s += '
  • {v}
  • '
    .format(v=x,url=url,args=args) # 判断下一页 if p == count: s += '
  • 下一页
  • '
    .format(v=count,url=url,args=args) else: s += '
  • 下一页
  • '
    .format(v=p+1,url=url,args=args) # 尾页 s += '
  • 尾页
  • '
    .format(v=count,url=url,args=args) # 总页数 s += '
  • 共{v}页
  • '
    .format(v=count) return format_html(s)

    2,定义路由

    # 后台商品列表
    url(r'^goodsindex', goodsviews.goodsindex,name="goodsindex"),
    

    3,定义视图函数,并查询数据,进行分页

    # 获取分页的数据
    ob = Goods.objects()
    
    # 数据分页
    from django.core.paginator import Paginator
    # 实例化分页类
    paginator = Paginator(ob,2)
    # 获取当前页码
    p = int(request.GET.get('p',1))
    # 获取分页数据对象[{id:1},{id:2}]  [{id:3},{id:4}]
    goodslist= paginator.page(p)
    # 分配数据
    context = {'goods':goodslist}
    

    4,定义模板.加载数据和分页数据

    { % load adminpagetag % }
    { % PageShow goods.paginator.num_pages request % }
    

    你可能感兴趣的:(Django,python)