首页 > 技术文章 > django分页扩展之显示上下页和标签每页的跳转

wenghao 2019-08-05 16:20 原文

views

class CustomPaginator(Paginator):
def __init__(self,current_page, per_pager_num,*args,**kwargs):
# 当前页
self.current_page = int(current_page)
# 最多显示的页码数量 11
self.per_pager_num = int(per_pager_num)
super(CustomPaginator,self).__init__(*args,**kwargs)#继承Paginator对象,没对其内部改变


def pager_num_range(self):
# 当前页
#self.current_page
# 最多显示的页码数量 11
#self.per_pager_num
# 总页数特别多
# self.num_pages
if self.num_pages < self.per_pager_num:
return range(1,self.num_pages+1)
# 总页数特别多 5
part = int(self.per_pager_num/2)
if self.current_page <= part:
return range(1,self.per_pager_num+1)
if (self.current_page + part) > self.num_pages:
return range(self.num_pages-self.per_pager_num+1,self.num_pages+1)
return range(self.current_page-part,self.current_page+part+1)

def index1(request):

# 全部数据:USER_LIST,=》得出共有多少条数据
# per_page: 每页显示条目数量
# count: 数据总个数
# num_pages:总页数
# page_range:总页数的索引范围,如: (1,10),(1,200)
# page: page对象(是否具有下一页;是否有上一页;)
current_page = request.GET.get('p')
# Paginator对象
# paginator = Paginator(USER_LIST, 10)
paginator = CustomPaginator(current_page,11,USER_LIST, 10)
try:
# Page对象
posts = paginator.page(current_page)#这里进行一个切片
# has_next 是否有下一页
# next_page_number 下一页页码
# has_previous 是否有上一页
# previous_page_number 上一页页码
# object_list 分页之后的数据列表,已经切片好的数据
# number 当前页
# paginator paginator对象
except PageNotAnInteger:#表示填的不是整数
posts = paginator.page(1)
except EmptyPage:#如果空页数,那么就填总页数
posts = paginator.page(paginator.num_pages)

return render(request,'index1.html',{'posts':posts})


html

index1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{% for row in posts.object_list %}
<li>{{ row.name }}-{{ row.age }}</li>
{% endfor %}
</ul>
{% include 'include/pager.html' %}
{# {% if posts.has_previous %}#}
{# <a href="/index.html?p={{ posts.previous_page_number }}">上一页</a>#}
{# {% else %}#}
{# <a href="#">上一页</a>#}
{# {% endif %}#}
{##}
{# {% if posts.has_next %}#}
{# <a href="/index.html?p={{ posts.next_page_number }}">下一页</a>#}
{# {% endif %}#}
{# <span>#}
{# {{ posts.number }}-{{ posts.paginator.num_pages }}#}
{# </span>#}
</body>
</html>

pager
{#当没有上一页的时候,让显示上一页但是点不动#}
{% if posts.has_previous %}
<a href="/index.html?p={{ posts.previous_page_number }}">上一页</a>
{% else %}
<a href="#">上一页</a>
{% endif %}

{% for i in posts.paginator.pager_num_range %}
{% if i == posts.number %}
<a style="font-size: 30px;" href="/index1.html?p={{ i }}">{{ i }}</a>
{% else %}
<a href="/index1.html?p={{ i }}">{{ i }}</a>
{% endif %}
{% endfor %}

{% if posts.has_next %}
<a href="/index.html?p={{ posts.next_page_number }}">下一页</a>
{% endif %}
<span>
{{ posts.number }}-{{ posts.paginator.num_pages }}
{# {{ posts.paginator.num_pages }}总页数#}
</span>

推荐阅读