Django 模型操作-分页(七)

news2024/12/23 23:53:15

一、连接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、运行效果

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis `saveBatch` 性能调优详解

文章目录 1. 引言2. MyBatis saveBatch 简介3. 常见性能问题3.1 SQL 语句拼接3.2 参数传递3.3 数据库连接数 4. MyBatis saveBatch 性能调优4.1 使用批量插入语句4.1.1 代码示例 4.2 使用MyBatis的foreach标签4.2.1 代码示例 4.3 使用VALUES构造器4.3.1 代码示例 4.4 调整批量大…

机器学习算法性能评估常用指标总结

考虑一个二分问题&#xff0c;即将实例分成正类&#xff08;positive&#xff09;或负类&#xff08;negative&#xff09;。对一个二分问题来说&#xff0c;会出现四种情况。如果一个实例是正类并且也被 预测成正类&#xff0c;即为真正类&#xff08;True positive&#xff0…

轻松通关Flink第24讲:Flink 消费 Kafka 数据业务开发

在上一课时中我们提过在实时计算的场景下&#xff0c;绝大多数的数据源都是消息系统&#xff0c;而 Kafka 从众多的消息中间件中脱颖而出&#xff0c;主要是因为高吞吐、低延迟的特点&#xff1b;同时也讲了 Flink 作为生产者像 Kafka 写入数据的方式和代码实现。这一课时我们将…

张驰咨询:掌握流程改进的关键,深入了解六西格玛绿带培训

尊敬的读者&#xff0c;当您寻求提升个人能力&#xff0c;加强企业流程管理时&#xff0c;六西格玛绿带培训无疑是您的不二选择。本文将带您深入了解六西格玛绿带培训的核心内容、必备工具和实际案例&#xff0c;以助您在职业生涯中一帆风顺。 六西格玛绿带培训主要针对中层管…

【SQL开发实战技巧】系列(四十八):Oracle12C常用新特性☞多分区操作和管理

系列文章目录 【SQL开发实战技巧】系列&#xff08;一&#xff09;:关于SQL不得不说的那些事 【SQL开发实战技巧】系列&#xff08;二&#xff09;&#xff1a;简单单表查询 【SQL开发实战技巧】系列&#xff08;三&#xff09;&#xff1a;SQL排序的那些事 【SQL开发实战技巧…

风险评估是什么,为什么被称为保护网络安全的重要一环!

随着互联网的普及和信息技术的快速发展&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。然而&#xff0c;网络在为我们带来便利的同时&#xff0c;也存在着各种安全风险。因此&#xff0c;进行网络风险评估是保护网络安全的重要一环。而为什么说风险评估是保护网络…

Gti GUI添加标签

通过Git Gui打开项目&#xff0c;通过菜单打开分支历史&#xff0c;我这里是名为"develop"的分支 选中需要打标签的commit&#xff0c;右键-Create tag即可 但貌似无法删除标签&#xff0c;只能通过git bash&#xff0c;本地标签通过git tag -d tagname&#xff0c;…

《使用ThinkPHP6开发项目》 - 创建应用

《使用ThinkPHP6开发项目》 - 安装ThinkPHP框架-CSDN博客 《使用ThinkPHP6开发项目》 - 设置项目环境变量-CSDN博客 《使用ThinkPHP6开发项目》 - 项目使用多应用开发-CSDN博客 根据前面的步骤&#xff0c;我们现在就可以开发我们的项目开发了&#xff0c;根据项目开发的需要…

晶圆划片机助力LED陶瓷基板高效切割:科技提升产业新高度

博捷芯半导体划片机在LED陶瓷基板制造领域&#xff0c;晶圆划片机作为一种先进的切割工具&#xff0c;正在为提升产业效率和产品质量发挥重要作用。通过精确的切割工艺&#xff0c;晶圆划片机将LED陶瓷基板高效地切割成独立的芯片&#xff0c;为LED产业的快速发展提供了有力支持…

大数据分析与国际市场:跨境电商如何精准洞察需求

随着数字化时代的来临&#xff0c;大数据分析已经成为跨境电商的一项关键工具&#xff0c;为企业提供了更深入、更精准的市场洞察。在国际市场竞争激烈的环境中&#xff0c;了解和满足消费者需求是取得成功的关键。本文将探讨大数据分析在跨境电商中的作用&#xff0c;以及如何…

奇迹进化宝石怎么用

奇迹进化宝石的用法是: (一)先用再生宝石点在想要强化的物品上生成强化属性。 (二)点击进化石放到想要进化的具有强化属性的物品上。 进化过程存在一定概率的成功/失败&#xff0c;高级进化石的成功概率比低级进化石的成功概率低。 进化成功时&#xff0c;强化的属性会提高。…

配置本地端口镜像示例

目录 实验拓扑 组网需求 配置思路 配置步骤 1.配置观察端口 2.配置镜像端口 实验拓扑 组网需求 如实验拓扑所示 某公司行政部通过Switch与外部Internet通信&#xff0c;监控设备Server&#xff08;Router&#xff09;与Switch直连。 现在希望通过Server对行政部访…

微信小程序:模态框(弹窗)的实现

效果 wxml <!--新增&#xff08;点击按钮&#xff09;--> <image classimg src"{{add}}" bindtapadd_mode></image> <!-- 弹窗 --> <view class"modal" wx:if"{{showModal}}"><view class"modal-conten…

用keepalived做mysql高可用

两台机器(centos7系统)安装mysql [rootmysql-keep-master ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm [rootmysql-keep-master ~]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm [rootmysql-keep-master ~]# yum -y install yu…

2024年网络安全竞赛-网站渗透

网站渗透 (一)拓扑图 1.使用渗透机对服务器信息收集,并将服务器中网站服务端口号作为flag提交; 使用nmap工具对靶机进行信息收集 2.使用渗透机对服务器信息收集,将网站的名称作为flag提交; 访问页面即可 3.使用渗透机对服务器渗透,将可渗透页面的名称作为flag提交…

RT-DETR优化:Backbone改进 | UniRepLKNet,通用感知大内核卷积网络,RepLK改进版本 | 2023.11

🚀🚀🚀本文改进: UniRepLKNet,通用感知大内核卷积网络,ImageNet-22K预训练,精度和速度SOTA,ImageNet达到88%, COCO达到56.4 box AP,ADE20K达到55.6 mIoU 🚀🚀🚀RT-DETR改进创新专栏:http://t.csdnimg.cn/vuQTz 学姐带你学习YOLOv8,从入门到创新,轻轻松松…

创投课程第四期 | Web3一级市场投资框架的演变及投资人能力框架的构成

协会邀请了来自Zonff Partners的合伙人——Colin&#xff0c;作为VC创投课程第4期的嘉宾&#xff0c;在北京时间12月9日(周六)下午14:00 PM-15:00 PM于蚂蚁链科技产业创新中心进行线下分享&#xff0c;届时将与所有对Web3投资、创业心怀热忱的朋友们共同探讨《WEB3一级市场投资…

【机器学习实训项目】黑色星期五画像分析

目录 前言 一、项目概述 1.1 项目简介 1.2 项目背景 1.3 项目目标 二、数据分析 2.1 导入库 2.2 数据基本信息 三、画像分析 3.1 画像1&#xff1a;消费金额Top10 3.2 画像2&#xff1a;高频消费Top10 3.3 画像3&#xff1a;人均消费金额Top10 3.4 画像4&#xff1a;男女消费对…

Java代码审计之SpEL表达式注入漏洞分析

文章目录 前言SpEL表达式基础基础用法安全风险案例演示 CVE-2022-22963漏洞简述环境搭建反弹shell CVE漏洞调试分析本地搭建调试分析补丁分析 总结 前言 表达式注入是 Java 安全中一类常见的能够注入命令并形成 RCE 的漏洞&#xff0c;而常见的表达式注入方式有 EL 表达式注入…

Proteus仿真--射击小游戏仿真设计

本文介绍基于proteus射击小游戏仿真设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 K1-K4为4个按键&#xff0c;用于上移、下移、确认等&#xff0c;模拟单机游戏 仿真运行视频 Proteus仿真--射击小游戏仿真设计 附完整Proteus仿真资料代码资料 …