思路:
- view得到基本数据:
- 提供给前端当前页面的数据
- 判断是否有上一页/下一页
- url路由
- 前端展示
View逻辑
写一个简单的View,使用Paginator
时:
- 首先导入
django.core.paginator.Paginator
类,初始化的时候指定一页是多少数据 - 调用
paginator.page(number)
,指定传入前端的数据是第几页的,这里的number必须是整形
from django.shortcuts import render
from django.views.generic import View
from django.core.paginator import Paginator
class ManyPageView(View):
def get(self, request):
my_info_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 数据源,这里可以从数据库里读
current_page_num = request.GET.get('page', 1) # 读取get中的page属性,没有就默认1
paginator = Paginator(my_info_list, 3) # 每3份数据为1页
# print('数据总数:', paginator.count)
# print('总页数:', paginator.num_pages)
# print("页码列表:", paginator.page_range)
page_info = paginator.page(number=current_page_num) # number指定第几页,第一页:number=1
return render(request, "many_pages.html", {
"page_info": page_info,
})
URL路由
path('many_page', ManyPageView.as_view())
前端展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>upload_table</title>
</head>
<body>
<body>
{% for text in page_info.object_list %}
<span>{
{ text }}</span>
{% endfor %}
<div>
{% if page_info.has_previous %}
<a href="?page={
{ page_info.previous_page_number }}">上一页</a>
{% endif %}
{% if page_info.has_next %}
<a href="?page={
{ page_info.next_page_number }}">下一页</a>
{% endif %}
</div>
</body>
</body>
</html>
展示效果:
效果图1:
效果图2: