1、接上一篇文章,python-Django展示前台首页
2、使用python的切片的方式进行分页,列如:
在Python Console控制台中输入:
第一页:
a = [1,2,3,4,5,6,7,8]
a[0:2]
输出:[1,2]
第二页:
a[2:4]
输出:[3,4]
第三页:
a[4:6]
输出:[5,6]
.。。。以此类推,如图:
3、在控制中输入:
from movie.models import Movie
Movie.objects.all()
输出发现返回的值为一个列表,如图:
同理可得:
# 页码 num 每页显示记录数 size
# 1 2 [0:2]
# 2 2 [2:4]
# 3 2 [4:6]
# num size [((num-1)*size):(num*size)]
4、编写分页的逻辑:
def page(num,size=20):
#接收当前页码数
num = int(num)
#总记录数
totalRecords = Movie.objects.count()
#总页数
totalPages = int(math.ceil(totalRecords*1.0/size))
#判断是否越界
if num <1:
num = 1
if num >totalPages:
num = totalPages
#计算出每页显示的记录
movies = Movie.objects.all()[((num-1)*size):(num*size)]
return movies,num
该方法返回的值为数据的对象和当前的页码数,如图:
5、编写请求的逻辑:
def index_view(request):
#接收请求参数 num
num = request.GET.get('num',1)
#处理分页请求
movies,n = page(num)
#上一页的页码
pre_page_num = n-1
# 下一页的页码
next_page_num = n+1
return render(request,'index01.html',{'movies':movies,'pre_page_num':pre_page_num,'next_page_num':next_page_num})
如图:
6、编写前台逻辑:
<div id="content" >
<ul class="clearfix">
{% for movie in movies %}
<li>
<a href="{{ movie.mlink }}"><img src="https://www.haijin.xyz/HaijinWeblogPhoto/uploadFiles/QQ%E6%88%AA%E5%9B%BE20200316130103.png" style="height:136px;width: 125px"/></a>
<h1 class="h1">{{ movie.mname }}</h1>
<span class="tip">{{ movie.mdesc }}</span>
</li>
{% endfor %}
</ul>
</div>
<div>
<a href="/movie/?num={{ pre_page_num }}">上一页</a>
<a href="/movie/?num={{ next_page_num }}">下一页</a>
</div>
如图:
7、重启项目,访问http://127.0.0.1:8000/movie/,如图: