size = 每页展示的条数。
plus=当前页展示的前几页后几页一起展示。
from django.utils.safestring import mark_safe
def numlist(request):
# for i in range(1,100):
# a = "1804539"+str(random.randint(1000,9999))
# models.prettyNum.objects.create(mobile= a,price=998, level=1,status=1)
search_dic = {}
search = request.GET.get("query",'')
if search:
search_dic["mo5bile__contains"]= search
queryset = models.prettyNum.objects.filter(**search_dic)
"""分页逻辑"""
page= int(request.GET.get("page",1))
size =10
start =(page-1)*size+1
end = page*size +1
queryset = models.prettyNum.objects.all()[start:end]#核心所在
total_count = models.prettyNum.objects.all().count()#计算一共有多少条数据
total_page,div = divmod(total_count,size)#计算一共可以分几页
if div:
total_page += 1
plus= 5
if total_page <= 2*plus+1:
start_page = 1
end_page=total_page
else:
if page-plus<=1:
start_page = 1
end_page = 2*plus+1
else:
if page+plus>=total_page:
start_page = total_page-2*plus
end_page = total_page
else:
start_page=page-plus
end_page =page+plus
page_str_list =[]
"""首页"""
page_str_list.append("<li><a href='?page={}'>首页</a></li>".format(1))
"""上一页"""
if page-1 <= 0:
pre ='''<li>
<a href="?page={}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>'''.format(1)
else:
pre = '''<li>
<a href="?page={}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>'''.format(page-1)
page_str_list.append(pre)
for i in range(start_page,end_page+1):#控制显示分页标签的数量
if page == i:
ele = '<li class="active"><a href="?page={}">{}</a></li>'.format(i,i)
else:
ele = '<li ><a href="?page={}">{}</a></li>'.format(i, i)
page_str_list.append(ele)
"""下一页"""
if page +1 >=total_page:
post = '''<li>
<a href="?page={}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>'''.format(total_page)
else:
post = '''<li>
<a href="?page={}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>'''.format(page+1)
page_str_list.append(post)
"""尾页"""
page_str_list.append("<li><a href='?page={}'>尾页</a></li>".format(total_page))
page_str = mark_safe("".join(page_str_list))
return render(request,"numlist.html", {"queryset":queryset,"q":search,"page_str":page_str}
前端应用
<div class="text-center">
<nav aria-label="Page navigation">
<ul class="pagination">
{{ page_str }}
</ul>
</nav>
</div>