先思考一个问题,如今假设已知有100页数据,当前是第1页,要得出1-10的页码数,而当前若是是第50页,则要输出46-55的页码数html
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)
在当前应用目录下建立templatetags目录和pagetag.py文件,web
能够在模板中使用{ % load pagetag % }加载django
注意:templatetags目录名不能更改,pagetag.py文件能够自定义,但对应的在模板中加载时也须要更更名字svg
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 += '<li><a href="{url}?p={v}{args}">首页</a></li>'.format(v=1,url=url,args=args) # 判断上一页 if p == 1: s += '<li><a href="{url}?p={v}{args}">上一页</a></li>'.format(v=1,url=url,args=args) else: s += '<li><a href="{url}?p={v}{args}">上一页</a></li>'.format(v=p-1,url=url,args=args) # 循环页码数 for x in range(begin,end+1): if x == p: s += '<li class="am-active"><a href="{url}?p={v}{args}">{v}</a></li>'.format(v=x,url=url,args=args) else: s += '<li ><a href="{url}?p={v}{args}">{v}</a></li>'.format(v=x,url=url,args=args) # 判断下一页 if p == count: s += '<li><a href="{url}?p={v}{args}">下一页</a></li>'.format(v=count,url=url,args=args) else: s += '<li><a href="{url}?p={v}{args}">下一页</a></li>'.format(v=p+1,url=url,args=args) # 尾页 s += '<li><a href="{url}?p={v}{args}">尾页</a></li>'.format(v=count,url=url,args=args) # 总页数 s += '<li>共{v}页</li>'.format(v=count) return format_html(s)
# 后台商品列表 url(r'^goodsindex', goodsviews.goodsindex,name="goodsindex"),
# 获取分页的数据 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}
{ % load adminpagetag % } { % PageShow goods.paginator.num_pages request % }