utils文件夹下面的pagination
"""
自定义分页组件
"""
import math
from django.utils.safestring import mark_safe
class Pagination(object):
def __init__(self, request,queryset, page_size=20,page_param="page",plus=5):
page = request.GET.get(page_param,"1")
if page.isdecimal():
page = int(page)
else:
page = 1
self.page = page
self.page_size = page_size
self.start = (page - 1) * page_size
self.end = page * page_size
self.page_queryset = queryset[self.start: self.end]
page_count = queryset.count()
total = math.ceil(page_count / page_size)
self.total = total
self.plus = plus
# print(total)
def html(self):
# plus = 5
if self.total <= 2 * self.plus + 1:
# 当前页面比较少
start = 1
end = self.total
else:
# 页数比较多的时候
if self.page <= self.plus:
start = 1
end = 2 * self.plus
else:
if (self.page + self.plus) > self.total:
start = self.total - 2 * self.plus
end = self.total
else:
start = self.page - self.plus
end = self.page + self.plus
# 生成页码
dict_list_str = []
if self.page > 1:
prev = '<li><a href="?page={}">《</a></li>'.format(self.page - 1)
else:
prev = '<li><a href="?page={}">《</a></li>'.format(1)
dict_list_str.append(prev)
for i in range(start, end + 1):
if i == self.page:
ele = '<li class="active"><a href="?page={}">{}</a></li>'.format(i, i)
else:
ele = '<li><a href="?page={}">{}</a></li>'.format(i, i)
dict_list_str.append(ele)
if self.page < self.total:
prev = '<li><a href="?page={}">》</a></li>'.format(self.page + 1)
else:
prev = '<li><a href="?page={}">》</a></li>'.format(self.total)
dict_list_str.append(prev)
page_string = mark_safe(''.join(dict_list_str))
return page_string
view.py下面的调分页
def prettynum_list(request):
# 页码
dict_list = {}
value = request.GET.get('q','')
if value :
dict_list['mobile__contains'] = value
queryset= PrettyNum.objects.filter(**dict_list)
page_object = Pagination(request,queryset,page_size=20)
queryset = PrettyNum.objects.all()
page_queryset = page_object.page_queryset
# print(page_count)
page_string = page_object.html()
# 当前页
return render(request,'prettynum_list.html' ,{'pretty_list':page_queryset,'value':value,'page_string':page_string,})
html页面的展示
{% extends 'layout.html' %}
{% block content %}
<div class="container">
<div style="margin-bottom:10px">
<a class="btn btn-success" href="/prettynum/add/">
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span>新建靓号</a>
<div style="float:right;width:300px">
<form method="get">
<div class="input-group">
<input type="text" class="form-control" value="{{value}}" name="q" placeholder="Search for...">
<span class="input-group-btn">
<button class="btn btn-default glyphicon " type="submit">
<span class="glyphicon glyphicon-zoom-in" aria-hidden="true"></span>
</button>
</span>
</div>
</form>
</div>
</div>
<div>
<div class="panel panel-default">
<!-- Default panel contents -->
<div class="panel-heading"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>用户列表</div>
<!-- Table -->
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>手机号</th>
<th>价格</th>
<th>级别</th>
<th>状态</th>
<th>编辑</th>
</tr>
</thead>
<tbody>
{% for obj in pretty_list %}
<tr>
<th>{{obj.id}}</th>
<th>{{obj.mobile}}</th>
<th>{{obj.price}}</th>
<th>{{obj.get_level_display}}</th>
<th>{{obj.get_status_display}}</th>
<th>
<a href="/prettynum/{{obj.id}}/edit/" class="btn btn-info btn-xs">编辑</a>
<a href="/prettynum/delete/?nid={{obj.id}}" class="btn btn-danger btn-xs">删除</a>
</th>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<div class="bs-example" data-example-id="disabled-active-pagination" style="text-align:center">
<nav aria-label="...">
<ul class="pagination">
{{page_string}}
<!-- {{page_str_list}}-->
<!-- <li ><a href="?page=1">1 <span class="sr-only">(current)</span></a></li>-->
<!-- <li><a href="?page=2">2</a></li>-->
<!-- <li><a href="?page=3">3</a></li>-->
<!-- <li><a href="?page=4">4</a></li>-->
<!-- <li><a href="?page=5">5</a></li>-->
</ul>
</nav>
</div>
</div>
{% endblock %}