先思考一个问题,现在假设已知有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)
在当前应用目录下创建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)
# 后台商品列表
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 % }