2021-08-03-DJ-021 django 的分页器使用,Paginator

我们在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 %}">&lt;</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 %}">&gt;</a>


    </div>
{% else %}
    <h3>用户未登录,3秒后进入登录页</h3>
{% endif %}

{% endblock %}

4.显示效果

在这里插入图片描述
样式就自己画,我 就随便取了一个编好的样式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Amoor123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值