views.py 代码:
def person_page(request): # 从URL中取出参数page,这个参数是"?page=1"形式 cur_page_num = request.GET.get('page') # 取得PrettyNum中的记录总数 total_count = models.PrettyNum.objects.all().count() # 设定每一页显示多少条记录 one_page_lines = 10 # 页面上总共展示多少页码标签 page_maxtag = 9 """ 根据总记录数,计算出总的页数 通过divmod函数取得商和余数,有余数时,总页数是商加1 同时判断当前页的页码是否大于总页数,如果大于总页数,设置当前页码等于最后一页的页码 """ total_page,remainder=divmod(total_count,one_page_lines) if remainder: total_page += 1 try: # 参数page传递过来的是字符类型数值,因此需要转化为整数类型 cur_page_num = int(cur_page_num) # 如果输入的页码超过了超过了最大的页码,设置当前页码是最后一页的页码 if cur_page_num > total_page: cur_page_num = total_page except Exception as e: # 当输入的页码不是正整数或者不是数字时,设置当前页码是第一页的页码 cur_page_num = 1 # 定义两个变量,指定表中当前页的记录开始数,以及当前页的记录结束数 rows_start = (cur_page_num-1)*one_page_lines rows_end = cur_page_num*one_page_lines # 如果页数小于每页设置的页码标签数,设置每页页码标签数为总页数 if total_page<page_maxtag: page_maxtag=total_page # 把当前页码标签放在中间,前面放一半页码标签,后面放一半页码标签 # 因此先把设置的页码标签数除以2 half_page_maxtag = page_maxtag//2 # 页面上页码标签的开始数 page_start = cur_page_num - half_page_maxtag # 页面上页码标签的结束数 page_end = cur_page_num + half_page_maxtag """ 如果计算出的页码标签开始数小于1,页面中页码标签设置从1开始 设置页面中页码标签结束数等于前面设置的页码标签总数page_maxtag """ if page_start <=1: page_start =1 page_end=page_maxtag """ 如果计算出的页码标签数比总页码数大,设置最后的页码标签数为总页数 设置页面中页码开始数等于总页数减去page_maxtag加1 """ if page_end >= total_page: page_end = total_page page_start = total_page-page_maxtag + 1 if page_start <= 1: page_start = 1 # 对PrettyNum表中的记录进行切片,取出属于本页的记录 per_list = models.PrettyNum.objects.all()[rows_start:rows_end] # 初始化一个列表变量,用来保存拼接分页的HTML代码 html_page = [] # 首页代码 html_page.append('<li><a href="/person_page/?page=1">首页</a></li>') # 上一页页码标签的HTML代码,如果当前是第一页,设置上一页页码标签为非可用状态 if cur_page_num <=1: html_page.append('<li class="disabled"><a href="#"><span aria-hidden="true">«</span></a></li>'.format( cur_page_num-1)) else: # 上一页页码标签的HTML代码 html_page.append('<li><a href="/person_page/?page={}"><span aria-hidden="true">«</span></a></li>'.format( cur_page_num - 1)) # 依次取页码标签 for i in range(page_start,page_end+1): # 如果等于当前页就加一个active类 if i == cur_page_num: html_temp = '<li class="active"><a href="/person_page/?page={0}">{0}</a></li>'.format(i) else: html_temp = '<li><a href="/person_page/?page={0}">{0}</a></li>'.format(i) html_page.append(html_temp) # 下一页页码标签的HTML页码 # 判断如果是最后一页,下一页设为disabled if cur_page_num >= total_page: html_page.append('<li class="disabled"><a href="#"><span aria-hidden="true">»</span></a></li>') else: html_page.append( '<li><a href="/person_page/?page={}"><span aria-hidden="true">»</span></a></li>'.format( cur_page_num + 1)) # 最后一页页码标签的html代码 html_page.append( '<li><a href="/person_page/?page={}">尾页</a></li>'.format(total_page)) # 把HTML连接起来 page_nav = ''.join(html_page) return render(request,'list.html',{'person_list':per_list,'page_nav':page_nav})
HTMl 代码:
<div class="panel panel-default"> <div class="panel-heading"> <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span> 用户列表 </div> <table class="table table-bordered"> {% csrf_token %} <thead> <tr> <td>ID</td> <td>手机号</td> <td>价格</td> <td>级别</td> <td>状态</td> <td>操作</td> </tr> </thead> <tbody> {% for pe in person_list %} <tr> <td>{{ pe.id }}</td> <td>{{ pe.mobile }}</td> <td>{{ pe.price }}</td> <td>{{ pe.get_level_display }}</td> <td>{{ pe.get_status_display }}</td> <td> <a class="btn btn-primary btn-xs" href="/pretty_edit/{{ pe.id }}">编辑</a> <a class="btn btn-danger btn-xs" href="/pretty_del/{{ pe.id }}">删除</a> </td> </tr> {% endfor %} </tbody> </table> </div> <!--分页代码--> <nav aria-label="Page navigation"> <ul class="pagination"> <!-- 用模板过滤标签,防止对HTMl 代码转义--> {{ page_nav|safe }} </ul> </nav> </div>
标签:cur,html,django,普通,num,total,页码,page,分页 From: https://www.cnblogs.com/p4567/p/17686271.html