我们在list页面显示列表,但是全部用户一起显示就太多了,用户好在当时只生成了一百多个,换成3000条订单一起显示,加载出来不知道要多久。
所以页面势必要进行切割 分页
这节做完的 源代码在这里
官方文档 对分页器的实现的描述
操作视频一直显示审核,我还是直接放链接,等审核完就可以看了
这节主要是带大家进行实操
1.思路
根据分页器类提供的属性和方法,对用户列表的界面进行分页
2.视图函数
参数的意思在代码注释里
import os
import uuid
from os.path import exists
from django.contrib.auth.hashers import check_password
from django.core.paginator import Paginator
from django.http import HttpRequest, HttpResponse, JsonResponse, HttpResponseRedirect
from django.shortcuts import render, redirect
from mainapp.models import UserModel
def userpage(request):
'''
page是页码,pager是显示的页面内容,paginator是分页器,这里设置一页10个
:param request:
:return:
'''
users=UserModel.objects.all()
page=request.GET.get('page',1)
paginator=Paginator(users,10)
pager = paginator.page(page)
return render(request,'mainapp/list.html',locals())
2.路由
修改原来的路由连接到新的视图函数
# path('list',user_list,name='list'),#002手写数据#010用户登录重定向
path('list',userpage,name='list'),#021做分页的用户列表
3.模板
模板修改原来的用户列表list.html
这里的用户列表变为了pager.object_list,不是原来的users了,如果还用原来的那么显示的内容就还是原来那些,点下面的链接就没有用了。
pager.has_previous和has_next表示有没有上一个或下一个,这里有的话2个箭头符号是个相应的链接,没有的话就是空链接
{% extends 'index.html' %}
{% block metas %}
{% if request.COOKIES.token == None %}
<meta http-equiv="refresh" content="3;url=/main/logout">
{% endif %}
{% endblock %}
{% block title %}
用户列表
{% endblock %}
{% block content %}
{% if request.COOKIES.token != None %}
<p>登录者:{{ request.session.login_user.user_name }}</p>
<table class="table table-responsive" style="text-align: center;vertical-align: middle">
<thead class="text-capitalize">
<td>头像</td><td>账户</td><td>电话</td><td>年龄</td><td>账户状态</td>
</thead>
<tbody>
{% for user in pager.object_list %}
<tr><td><img height="100" src="/media/{{ user.img1|escape }}" ></td>
<td>{{ user.name }}</td>
<td>{{ user.number }}</td>
<td>{{ user.age }}</td>
<td>{{ user.status }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="align-middle" align="center">
<a href="{% if pager.has_previous %}?page={{ pager.previous_page_number }} {% else %} # {% endif %}"><</a>
{% for p in paginator.page_range %}
<a href="?page={{ p }}" class="{% if pager.number == p %} link-danger {% endif %}">{{ p }}</a>
{% endfor %}
<a href="{% if pager.has_next %}?page={{ pager.next_page_number }} {% else %} # {% endif %}">></a>
</div>
{% else %}
<h3>用户未登录,3秒后进入登录页</h3>
{% endif %}
{% endblock %}
4.显示效果
样式就自己画,我 就随便取了一个编好的样式