view.py得分页操作函数
1.简单来说就是获取总数据树数量 然后根据页面 算多少分页 传参给到html文件
def page_view(request, page=1):
# 页码 page
# 每页 数据数量 per_page
per_page = 12
# 分页功能
# 元数据 【1,2,3,4,5,6,7,8,9,10】
# 第一页数据 数据范围 1-5
# 第二页数据 数据范围 5-10
# 第几页 数据范围 数据下标范围 切片
# page=1 1-10 [0~9] [0~10]
# page=2 10~20 [10~19] [10~20]
# page=3 20~30 [20~29] [20~30]
# ....
# page=n 范围计算公式(page-1)*per_page~page*per_page
p = person.objects.all()
p = p[(page - 1) * per_page:page * per_page]
pageCount = math.ceil(person.objects.count() / per_page) # 向上取整获得总页数
pages = range(1, pageCount + 1)
# print(pageCount)
return render(request, 'userPage.html', {'person': p, 'pages': pages})
其中page=pages = range(1, pageCount + 1)得作用类似js里面搞出一个从1...18总共17个数组元素对象得 数字序列数组而已,python叫元组。。学习汇总卡了疑问了一下,之后得理解
2.urls.py需要路由动态传参给函数 从动态调用显示那个分页 path('userPage/<int:page>/', page_view, name='userPage')
尖括号里面对应得就是不同分页得页码
3.渲染页面 userPage.html Django模板语法写法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户分页</title>
<style>
ul {
list-style: none;
padding: 0;
}
.btn li {
float: left;
margin: 3px;
}
</style>
</head>
<body>
<h1>用户分页</h1>
<hr>
<ul>
{% for p in person %}
<li>{{ p.name }}-{{ p.age }}</li>
{% endfor %}
</ul>
{#<p>{{ pages }}</p>#}
<hr>
<ul class="btn">
{# <li>#}
{# <a href='{% url 'Uapp:userPage' 3 %}'>#}
{# <button>1</button>#}
{# </a>#}
{# </li>#}
{% for page in pages %}
<li>
<a href='{% url 'Uapp:userPage' page %}'>
<button>{{ page }}</button>
</a>
</li>
{% endfor %}
</ul>
</body>
</html>
4.其次还有自动分页
a、引入自动分页依赖
from django.core.paginator import Paginator
b.书写view.py自动分页处理函数def page_view2(request, page=1):
per_page = 18
alldata = person.objects.all().order_by('id')
PageNator = Paginator(alldata, per_page)
personData = PageNator.page(page) # 获取第page页面得数据
pageRange = PageNator.page_range # 是一个属性 页码范围
print(personData,pageRange)
return render(request, 'userPageAuto.html', {'persons': personData, 'pages': pageRange})
c.写对渲染结果django模板语法得html文件<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户自动分页</title>
<style>
ul {
list-style: none;
padding: 0;
}
.btn li {
float: left;
margin: 3px;
}
</style>
</head>
<body>
<h1>用户自动分页</h1>
<hr>
<ul>
{% for person in persons %}
<li>{{ person.name }}-{{ person.age }}</li>
{% endfor %}
</ul>
<hr>
<ul class="btn">
{% for page in pages %}
<li>
<a href='{% url 'Uapp:userPageAuto' page %}'>
<button>{{ page }}</button>
</a>
</li>
{% endfor %}
</ul>
</body>
</html>
|