django 分页 ******
- 分批获取数据 每次10条
models.UserInfo.objects.all()[0:10] #获取0-10的数据
models.UserInfo.objects.all()[10:20] #获取10-20的数据
- Django自带
from django.core.paginator import Paginator, Page
适合于:仅有上一页 下一页
弊端:页码全部显示,同时只适用于django开发环境,有很大的局限性。
def index(request):
current_page = request.GET.get('page')
user_list = models.UserInfo.objects.all()
paginator = Paginator(user_list,10) #创建paginator对象 Paginator(操作的数据列表,每页显示数据的数量)
#- paginator对象下.所有的方法
# per_page: 每页显示条目数量
# count: 数据总个数
# num_pages:总页数
# page_range:总页数的索引范围,如: (1,10),(1,200) 总共有多少页码
# page: page对象
try:
posts = paginator.page(current_page) #生成一个page对象,.page(页码数)
#page对象下所有的方法:
# has_next 是否有下一页
# next_page_number 下一页页码
# has_previous 是否有上一页
# previous_page_number 上一页页码
# object_list 分页之后的数据列表
# number 当前页
# paginator paginator对象
except PageNotAnInteger as e:
posts = paginator.page(1) #page对象 第一页
except EmptyPage as e:
posts = paginator.page(1)
return render(request,'index.html',{'posts':posts})
<h1>用户列表</h1>
<ul>
{% for row in posts.object_list %}
<li>{{ row.name }}</li>
{% endfor %}
</ul>
<div>
{% if posts.has_previous %}
<a href="/index.html?page={{ posts.previous_page_number }}">上一页</a>
{% endif %}
{% if posts.has_next %}
<a href="/index.html?page={{ posts.next_page_number }}">下一页</a>
{% endif %}
</div>
- 示例:
-index.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>用户信息表</h3>
<ul>
{% for item in posts.object_list %} {#获取分页之后当前页的数据列表#}
<li>{{ item.name }}</li>
{% endfor %}
</ul>
<div>
{% if posts.has_previous %} {# 判断有没有上一页 #}
<a href="/index/?page={{ posts.previous_page_number }}">上一页</a>
{% endif %}
{% for i in posts.paginator.page_range %} {# 转成paginator对象,获取所有页码 #}
<a href="/index/?page={{ i }}">{{ i }}</a>
{% endfor %}
{% if posts.has_next %} {# 判断有没有下一页 #}
<a href="/index/?page={{ posts.next_page_number }}">下一页</a>
{% endif %}
</div>
</body>
</html>
-views.py函数
def index(request):
current_page = int(request.GET.get("page")) #获取当前页码
user_list = models.UserInfo.objects.all() #获取所有信息数据
paginator = Paginator(user_list,10) #创建Paginator对象
try:
posts = paginator.page(current_page) #创建page对象
except Exception as e:
posts = paginator.page(1)
return render(request,"index.html",{"posts":posts})
- 自定分页组件******<拿来直接用就OK了!>