Django 模型操作-分页(七)

一、连接MySql数据库

  1、先安装MySQL

  2、再安装MySQL驱动
      使用mysqlclient
      pip install mysqlclient

如果上面的命令安装失败, 则尝试使用国内豆瓣源安装:
 pip install -i https://pypi.douban.com/simple mysqlclient

二、在settings.py中配置

 

三、 book表的数据

四、手动分页和自动分页

1、函数视图

    手动分页

#手动分页
def get_pageinfo(request,page=1):
    # 每页显示6条数据
    per_page = 6

    # 分页分析
    # 数据[1,2,3,45,..100]
    # 第几页    数据范围   数据下标范围     切片
    #  page=1   1-6        0~5         [0:6]   =>   (1-1)*6  1*6
    #  page=2   7-12       6~11        [6:12]  =>   (2-1)*6  2*6
    #  page=3   13-18      12~17       [12:18] =>   (3-1)*6  3*6
    #   ..................

    # 获取所有的数据
    all=Book.objects.all()
    # 数据分页
    books=all[(page-1)*per_page:page*per_page]
    # 总个数
    count=Book.objects.count()
    # 总页数
    total_page=math.ceil(count/per_page)

    #数据范围 1,2,3,4..
    list_page=range(1,total_page+1)

    return render(request=request, template_name='show.html', context={'books':books,'listpages':list_page})

 2、show.html页面 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        #ul li {
            width: 30%;
            list-style: none;
            padding: 10px 0px;
            border: 1px solid cadetblue;
        }

        #pp li {
            display: inline;

        }

        .ff{
            font-weight: bolder;
        }
    </style>
</head>
<body>
<div>
    <h1>手动分页图书数据</h1>
    <ul id="ul">
        <li class="ff">编号----书名------价格------日期-------出版社编号</li>
        {% for bk in books %}
            <li>{{ bk.id }} -- {{ bk.title }} -- {{ bk.price}}-- {{ bk.pub_date| date:"Y-m-d" }}-- {{ bk.publish_id}}</li>
        {% endfor %}
    </ul>
    <div>
        <ul id="pp">
            {% for pa in listpages %}
                <li><a href="{% url 'pages' pa %}">
                    <button>第{{ pa }}页</button>
                </a></li>
            {% endfor %}
        </ul>
    </div>
</div>
</body>
</html>

  3、运行效果 

 

  (2) 自动分页 

    源码:Paginator类

     1、函数视图

#自动分页
def auto_pageinfo(request,page=1):
    # 每页显示6条数据
    per_page = 6

    # 获取所有的数据
    all=Book.objects.all()

    #使用分页器分页
    from django.core.paginator import Paginator
    paginator=Paginator(all,per_page)

    #获取第几页的数据
    books=paginator.page(page)

    # 页码范围
    #数据范围 1,2,3,4..
    list_page=paginator.page_range

    return render(request=request, template_name='autoshow.html', context={'books':books,'listpages':list_page})

    2、aushow.html页面 


<div>
    <h1>自动分页图书数据</h1>
    <ul id="ul">
        <li class="ff">编号----书名------价格------日期-------出版社编号</li>
        {% for bk in books %}
            <li>{{ bk.id }} -- {{ bk.title }} -- {{ bk.price}}-- {{ bk.pub_date| date:"Y-m-d" }}-- {{ bk.publish_id}}</li>
        {% endfor %}
    </ul>
    <div>
        <ul id="pp">
            {% for pa in listpages %}
                <li><a href="{% url 'pages2' pa %}">
                    <button>第{{ pa }}页</button>
                </a></li>
            {% endfor %}
        </ul>
    </div>
</div>

3、配置url路径

from django.urls import path

from books import views

urlpatterns = [
    path('pages/<int:page>', views.get_pageinfo,name='pages'),  #别名pages
    path('pages2/<int:page>', views.auto_pageinfo,name='pages2'),  #别名pages2
    path('pages3/', views.auto_pageinfo2,name='pages3'),  #别名pages3

]

4、运行效果

五、使用分页插件Django-pure-pagination

1、安装

pip install django-pure-pagination

2、在settings.py中注册

INSTALLED_APPS = [
     .....,
    'pure_pagination',
]

3、在settings.py中配置分页切割方式

# 分页配置
PAGINATION_SETTINGS = {
    'PAGE_RANGE_DISPLAYED':2, # 当前页相邻显示几个号码页
    'MARGIN_PAGES_DISPLAYED': 1,  # 首尾各显示几个号码页
    'SHOW_FIRST_PAGE_WHEN_INVALID': True,
}

4、函数视图

#分页插件
def auto_pageinfo2(request,page=1):
    # 每页显示5条数据
    per_page =3

    # 获取所有的数据
    all=Book.objects.all()

    #使用分页器分页
    from django.core.paginator import Paginator
    paginator=Paginator(all,per_page)

    try:
        page_number = request.GET.get('page', page)
    except PageNotAnInteger:
        page_number = 1

    #获取第几页的数据
    books=paginator.page(page_number)

    # 页码范围
    # 数据范围 1,2,3,4..
    list_page = paginator.page_range

    # books.paginator.pages

    return render(request, 'list.html', {'page_obj': books,"pages":list_page})

5、模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        #ul li {
            width: 30%;
            list-style: none;
            padding: 10px 0px;
            border: 1px solid cadetblue;
        }

        a {
            padding: 5px 10px;
            color: white;
            background-color: darkgray;
            margin: 1px; /*设置标签 a 之间的间隔*/
            text-decoration: none; /*去除页码数字下面的下划线*/
        }

        a:hover {
            color: black;
            background: cyan;
        }

        .current {
            color: black;
        }
    </style>
</head>
<body>
<div>
    <h1>插件分页图书数据</h1>
    <ul id="ul">
        <li class="ff">编号----书名------价格------日期-------出版社编号</li>
        {% for bk in page_obj %}
            <li>{{ bk.id }} -- {{ bk.title }}
                -- {{ bk.price }}-- {{ bk.pub_date| date:"Y-m-d" }}-- {{ bk.publish_id }}</li>
        {% endfor %}
    </ul>
</div>


{#Django-pure-pagination基础渲染方法#}
{#<div id="pagination">#}
{#    {{ page_obj.render }}#}
{#</div>#}


<div class="pagination">
    <span class="step-links">
        {% if page_obj.has_previous %}
            <a href="?page={{ page_obj.previous_page_number }}"> << </a>
        {% else %}
            <a href=""> << </a>
        {% endif %}

        <span class="current">
{#            Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.#}

            {% for page in pages %}
                {% if page %}
                    {% if page == page_obj.number %}
                        <a href="?page={{ page }}"><span class="current">{{ page }}</span></a>
                    {% else %}
                        <a href="?page={{ page }}" class="page">{{ page }}</a>
                    {% endif %}
                {% else %}
                    <a href="">...</a>
                {% endif %}
            {% endfor %}

        </span>


        {% if page_obj.has_next %}
            <a href="?page={{ page_obj.next_page_number }}"> >> </a>
        {% else %}
            <a href=""> >> </a>
        {% endif %}
    </span>
</div>

</body>
</html>

6、运行效果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/236032.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多模态AI产业链全景梳理

当前AI模型从单模态向多模态演进&#xff0c;有望实现认知智能&#xff0c;是AI未来发展的明确趋势。近期 AI 多模态模型不断取得突破性进展。OpenAI 于11 月发布了 GPT-4 Turbo 且开放了 GPTs再次颠覆行业&#xff0c;GPTs短期上线数量已超3万&#xff0c;揭开AIGC应用生态序幕…

CSS 实现无缝滚动

效果展示 CSS 知识点 animation 综合运用 页面整体布局 <div class"scroll" style"--t: 20s"><div><span>HTML</span><span>CSS</span><span>JavaScript</span><span>React</span><spa…

WEB 3D技术 以vue3+vite环境为例 讲解vue项目中使用three

上文 WEB 3D 技术&#xff0c;通过node环境创建一个three案例 中 我们打造了自己的第一个Web 3D界面 那么 今天 我们就来结合vue来开发我们的3D界面 这里 我们先创建一个文件夹 作为文件目录 千万不要放C盘 我们 依旧是在终端执行命令 npm init vitelatest输入一下项目名称 …

自动驾驶学习笔记(十七)——视觉感知

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo 社区开发者圆桌会》免费报名—>传送门 文章目录 前言 分类 目标检测 语义分割 实例分割 …

uniapp中使用 unicloud

一、新建一个带有unicloud 二、创建一个服务空间 1. 右键uniCloud&#xff0c;关联云服务空间 我当前没有服务空间&#xff0c;需要新建一个服务空间&#xff0c;之后将其关联。初始化服务空间需要的时间有点长 服务空间初始化成功后&#xff0c;刷新HBuilder&#xff0c;勾选…

数字图像处理(实践篇)二十 人脸特征提取

目录 1 安装face_recognition 2 涉及的函数 3 实践 使用face_recognition进行人脸特征提取. 1 安装face_recognition pip install face_recognition 或者 pip --default-timeout100 install face_recognition -i http://pypi.douban.com/simple --trusted-host pypi.dou…

【51单片机系列】矩阵按键扩展实验

本文对矩阵按键的一个扩展&#xff0c;利用矩阵按键和动态数码管设计一个简易计算器。代码参考&#xff1a;https://blog.csdn.net/weixin_47060099/article/details/106664393 实现功能&#xff1a;使用矩阵按键&#xff0c;实现一个简易计算器&#xff0c;将计算数据及计算结…

15Linux、GIT及相关相似面试题、PostMan

Linux和git相似是命令相关的层次结构相似 Linux Linux Linux常用操作_linux操作-CSDN博客 程序员常用的10个Linux命令_简介linux系统中的10个常用命令及功能-CSDN博客 help help 命令 &#xff1a;获得 shell 内置命令的帮助信息&#xff0c;常用形式 help cd ls --help …

SPI 通信-stm32入门

本节我们将继续学习下一个通信协议 SPI&#xff0c;SPI 通信和我们刚学完的 I2C 通信差不多。两个协议的设计目的都一样&#xff0c;都是实现主控芯片和各种外挂芯片之间的数据交流&#xff0c;有了数据交流的能力&#xff0c;我们主控芯片就可以挂载并操纵各式各样的外部芯片&…

SpringBoot+Netty+Websocket实现消息推送

这样一个需求&#xff1a;把设备异常的状态每10秒推送到页面并且以弹窗弹出来&#xff0c;这个时候用Websocket最为合适&#xff0c;今天主要是后端代码展示。 添加依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifact…

【SpringSecurity】-- 认证、授权

文章目录 SpringSecurity简介快速入门1.准备工作1.2引入SpringSecurity 认证1.登录校验流程2.原理2.1SpringSecurity完整流程2.2认证流程详解 3.解决问题3.1思路分析3.2准备工作3.3.实现3.3.1数据库校验用户3.3.2密码加密存储3.3.3登录接口3.3.4认证过滤器3.3.5退出登录 授权1.…

YOLOv8改进 | Neck篇 | Slim-Neck替换特征融合层实现超级涨点 (又轻量又超级涨点)

一、本文介绍 本文给大家带来的改进机制是Slim-neck提出的Neck部分&#xff0c;Slim-neck是一种设计用于优化卷积神经网络中neck部分的结构。在我们YOLOv8中&#xff0c;neck是连接主干网络&#xff08;backbone&#xff09;和头部网络&#xff08;head&#xff09;的部分&…

Tair(2):Tair安装部署

1 安装相关依赖库 yum install -y gcc gcc-c make m4 libtool boost-devel zlib-devel openssl-devel libcurl-devel yum&#xff1a;是yellowdog updater modified 的缩写&#xff0c;Linux中的包管理工具gcc&#xff1a;一开始称为GNU C Compiler&#xff0c;也就是一个C编…

本地如何使用PHP搭建简单Imagewheel云图床,结合内网穿透实现在外远程访问?

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

vue3使用Mars3D写区块地图

效果图 引入相关文件 因为我也是第一次使用&#xff0c;所以我是把插件和源文件都引入了&#xff0c;能使用启动 源文件 下载地址&#xff1a; http://mars3d.cn/download.html 放入位置 在index.html中引入 <!--引入cesium基础lib--><link href"/static/C…

Stable diffusion 简介

Stable diffusion 是 CompVis、Stability AI、LAION、Runway 等公司研发的一个文生图模型&#xff0c;将 AI 图像生成提高到了全新高度&#xff0c;其效果和影响不亚于 Open AI 发布 ChatGPT。Stable diffusion 没有单独发布论文&#xff0c;而是基于 CVPR 2022 Oral —— 潜扩…

爆肝整理,Java接口自动化测试实战-rest-assured(详细总结)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、关于rest-assu…

聊个开心的敏捷话题——40小时工作制

近年来&#xff0c;加班现象在很多行业已经普遍制度化&#xff0c;甚至“996”已成为一些行业标签。企业高强度的压榨让员工不堪重负&#xff0c;且时常由此引发的各种悲剧也并不鲜见。 所以&#xff0c;今天我们一起来聊一个开心轻松的话题——极限编程的40h工作制原则。 40…

本科毕业论文查重率高吗【一文读懂】

大家好&#xff0c;今天来聊聊本科毕业论文查重率高吗&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; 本科毕业论文查重率高吗&#xff1f;重要性与应对策略 摘要&#xff1a;对于本科毕业生来说&#…

PyQt6 QDateEdit日期控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计39条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…