views代码:
class PageInfo:
def __init__(self, page_num, per_page, all_data, base_page):
'''
:param page_num: 当前页
:param per_page: 每页数据数量
:param all_data: 总数据量
:param base_page: 固定页数
'''
try:
self.page_num = int(page_num)
except Exception as e:
self.page_num = 1
self.per_page = int(per_page)
self.all_data = all_data
self.base_page = base_page
def start(self):
return (self.page_num - 1) * self.per_page
def end(self):
return self.page_num * self.per_page
# 总页数函数(总数据/每页条数)
def total_pages(self):
a, b = divmod(self.all_data, self.per_page)
if b:
a = a + 1
return a
def pager(self):
page_list = []
harf = divmod(self.base_page, 2)[0]
# 如果总页数小于固定分页
if self.total_pages() <= self.base_page:
begin = 1
end = self.total_pages()
# 如果当前页 + 固定页的一半大于总页数
elif self.page_num + harf >= self.total_pages():
begin = self.total_pages() - self.base_page + 1
end = self.total_pages()
# 如果当前页小于harf+1
elif self.page_num < harf + 1:
begin = 1
end = self.base_page
else:
begin = self.page_num - harf
end = self.page_num + harf
# 上一页
if self.page_num <= 1:
prev = '<li><a href="#">上一页</a></li>'
else:
prev = '<li><a href="?p=%s">上一页</a></li>' % (self.page_num - 1)
page_list.append(prev)
for i in range(begin, end + 1):
if i == self.page_num:
temp = '<li class="active"><a href="?p=%s">%s</a></li>' % (i, i)
else:
temp = '<li><a href="?p=%s">%s</a></li>' % (i, i)
page_list.append(temp)
# 下一页
if self.page_num >= self.total_pages():
prev = '<li><a href="#">下一页</a></li>'
else:
prev = '<li><a href="?p=%s">下一页</a></li>' % (self.page_num + 1)
page_list.append(prev)
return page_list
def custom(request):
page_num = request.GET.get('p') #当前页
all_page = models.UserInfo.objects.all().count()
# 实例化一个page_info对象
page_info = PageInfo(page_num,10,all_page,11)
user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()]
return render(request,'custom.html',{'user_list':user_list,'page_list':page_info.pager()})
HTML代码:
<label for="">
#显示分页内容
{% for row in user_list %}
<li>{{ row.id }},{{ row.name }},{{ row.age }}</li>
{% endfor %}
#分页栏
<nav aria-label="Page navigation">
<ul class="pagination">
{% for page in page_list %}
{{ page |safe }}
{% endfor %}
</ul>
</nav>
</label>