django-普通分页
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>

浙公网安备 33010602011771号