需求:将100条数目以及信息分页显示,实现每页显示5条
先常规配置 models.ps 创建表结构
在app中创建添加100条数据的视图函数
创建对应的子路由并与主路由建立连接
创建分页显示的视图函数
# 引入模块 views.py
from django.core.paginator import Paginator, EmptyPage
def pag_test(request):
book_obj_list = models.Book.objects.all()
paginator = Paginator(book_obj_list, 5) # 每页显示五条数据
# try不产生新的作用域
try:
# 1从前端获取页码
current_num = int(request.GET.get('page',1)) # 默认第一页,以便第一次访问未获取页码用
# 2根据页码获取具体的page对象,前端可遍历获取内容
page_obj = paginator.page(current_num)
except EmptyPage:
# 当页码不符合try时,即超出范围后,默认第一页
page_obj = paginator.page(1)
current_num = 1
# 开头几个判断及处理(报错)
start = current_num - 3
if start < 1:
start = 0
end = 5
# 末尾几个判断及处理(少显示)
elif start > paginator.num_page - 5:
start = paginator.num_page - 5
end = paginator.num_page
# 一般情况
else:
end = current_num + 2
# 3获取页面
page_range = paginator.page_range[start:end]
print(page_range)
return reder(request, 'test.html', locals())
完善HTML页面建立连接
head引入
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.1.0/css/bootstrap.css">
获取数据
<ul>
{#遍历每页的内容#}
{% for book_obj in page_obj %}
<li>{{ book_obj.name }}-->>{{ book_obj.price }}</li>
{% endfor %}
</ul>
个人根据实际美化修改
仅供参考使用,个人学习笔记,望给点学习建议
优化版本2.0
paginator = Paginator(blog_obj_list, settings.EACH_PAGE_BLOGS_NUMBER)
# 获取url的页面参数(GET请求)
page_num = request.GET.get('page', 1)
page_of_blogs = paginator.get_page(page_num)
# 获取当前页码
currentr_page_num = page_of_blogs.number
# 获取当前页码前后各2页的页码范围
"""
"""
page_range = list(range(max(currentr_page_num - 2, 1), currentr_page_num)) + \
list(range(currentr_page_num, min(currentr_page_num + 2, paginator.num_pages) + 1))
# 加上省略页码标记
if page_range[0] - 1 >= 2:
page_range.insert(0, '...')
if paginator.num_pages - page_range[-1] >= 2:
page_range.append('...')
# 加上首页和尾页
if page_range[0] != 1:
page_range.insert(0, 1)
if page_range[-1] != paginator.num_pages:
page_range.append(paginator.num_pages)