Django 实现分页功能(django 2.2.7 python 3.7.5 )
Django 自带名为 Paginator 的分页工具, 方便我们实现分页功能。本文就讲解如何使用 Paginator 实现分页功能。
一、 Paginator
Paginator 类的作用是将我们需要分页的数据分割成若干份。当我们实现化一个 Paginator 类的实例时,需要给 Paginator 传入两个参数。第一个参数是数据源,可以是一个列表、元组、以及查询结果集 QuerySet。第二个参数需要传入一个整数,表示每页显示数据条数。具体写法如下:
Paginator 类中有三个常用的属性,它们分别是:
- count:表示所有页面的对象总数。
- num_pages: 表示页面总数。
- page_range: 下标从 1 开始的页数范围迭代器。
二、Page 对象
Paginator 类提供一个** page(number) **函数,该函数返回就是一个 Page 对象。参数 number 表示第几个分页。如果 number = 1,那么 page() 返回的对象是第一分页的 Page 对象。在前端页面中显示数据,我们主要的操作都是基于 Page 对象。具体用法如下:
1
2
|
# 使用 paginator 对象返回第 1 页的 page 对象 logs = paginator.page( 1 ) |
Page 对象有三个常用的属性:
- object_list: 表示当前页面上所有对象的列表。
- numberv: 表示当前页的序号,从 1 开始计数。
- paginator: 当前 Page 对象所属的 Paginator 对象。
Page 对象还拥有几个常用的函数:
- has_next(): 判断是否还有下一页,有的话返回True。
- has_previous():判断是否还有上一页,有的话返回 True。
- has_other_pages():判断是否上一页或下一页,有的话返回True。
- next_page_number(): 返回下一页的页码。如果下一页不存在,抛出InvalidPage 异常。
- previous_page_number():返回上一页的页码。如果上一页不存在,抛出InvalidPage 异常。
三、代码展示
一、views
1 from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage, InvalidPage #导入分页功能
2
3 #分页代码
4 def cut_page(request,db_list,page_total): #需要三个参数:网页的request请求、 数据库返回值、每页条目数
5 paginator = Paginator(db_list, page_total)
6 # 获取 url 后面的 page 参数的值, 首页不显示 page 参数, 默认值是 1
7 page = request.GET.get('page')
8 try:
9 db_list = paginator.page(page)
10 # todo: 注意捕获异常
11 except PageNotAnInteger:
12 # 如果请求的页数不是整数, 返回第一页。
13 db_list = paginator.page(1)
14 except InvalidPage:
15 # 如果请求的页数不存在, 重定向页面
16 return HttpResponse('找不到页面的内容')
17 except EmptyPage:
18 # 如果请求的页数不在合法的页数范围内,返回结果的最后一页。
19 db_list = paginator.page(paginator.num_pages)
20 return db_list
21
22
23 #具体调用
24 def sw_br(request):
25 sw_lists = models.sw_br.objects.all().order_by('sw_addr') #查询数据库数据
26 sw_lists = cut_page(request,sw_lists,11) #调用
27 return render(request,'sw_mgmt/b_r.html',{'sw_lists':sw_lists})
二、HTML
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="/static/openvpn/css/bootstrap.min.css"/>
1 <div class="table-responsive">
2 <table class="table table-hover">
3 <thead class="thead-light">
4 <tr>
5 {{ del_users_msg }}
6 <th scope="col" >ID</th>
7 <th scope="col" >品牌</th>
8 <th scope="col" >型号</th>
9 <th scope="col" >功能</th>
10 </tr>
11 </thead>
12 <tbody ckass="no-underline">
13 {% for item in sw_lists %}
14 <tr>
15 <th scope="row">{{ forloop.counter }}</th>
16 <td>{{ item.get_brand_display }}</td>
17 <td>{{ item.sw_model }}</td>
18 <td>{{ item.get_gn_display }}</td>
19 </tr>
20 {% endfor %}
21 </tbody>
22 </table>
23 {# 实现分页标签的代码 #}
24 {# 这里使用 bootstrap 渲染页面 #}
25 <div id="pages" class="text-center" >
26 <nav>
27 <ul class="pagination">
28 <li>共{{ sw_lists.paginator.num_pages }}页</li> {# 注意此处的sw_lists(以及后边的) 为后台传出的,需要更具自己的页面进行就该 #}
29 <li> </li>
30 <li class="step-links">
31 {% if sw_lists.has_previous %}
32 <a class='active' href="?page=1">首页</a>
33 <a class='active' href="?page={{ sw_lists.previous_page_number }}">上一页</a>
34 {% endif %}
35
36 <span class="current">
37 第 {{ sw_lists.number }} 页</span>
38
39 {% if sw_lists.has_next %}
40 <a class='active' href="?page={{ sw_lists.paginator.num_pages }}">末页</a>
41 <a class='active' href="?page={{ sw_lists.next_page_number }}">下一页</a>
42 {% endif %}
43 </li>
44 <li> </li>
45 </ul>
46 </nav>
47 </div>
48 </div>
四、效果
Django 实现分页功能(django 2.2.7 python 3.7.5 )的更多相关文章
- Django之分页功能
Django提供了一个新的类来帮助你管理分页数据,这个类存放在django/core/paginator.py.它可以接收列表.元组或其它可迭代的对象. 基本语法 class Paginator(ob ...
- WEB框架之Django实现分页功能
一 Paginator分页器 1 首先在数据库中生成大量数据 def index(request) book_list = [] for i in rang(1000) book = Book(tit ...
- Django——Paginator分页功能练习
1.路由urls.py from django.contrib import admin from django.urls import path from app01.views import in ...
- django 实现分页功能
分页效果: 视图代码: # -*- coding: utf-8 -*- from django.shortcuts import render,get_object_or_404 from djang ...
- django 添加分页功能的包
Django pagination based upon the core pagination module
- Django学习笔记(12)——分页功能
这一篇博客记录一下自己学习Django中分页功能的笔记.分页功能在每个网站都是必要的,当页面因需要展示的数据条目过多,导致无法全部显示,这时候就需要采用分页的形式进行展示. 分页在网站随处可见,下面展 ...
- 第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能
第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能 Django实现搜索功能 1.在Django配置搜索结果页的路由映 ...
- Django—自定义分页
分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...
- Django2.1中的分页功能详解
django的分页功能类将我们常用的多种方法均封装在Paginator类,根据这些方法我们均可深度定制我们的分页功能. 首先来看看[Paginator] 类的构造方法: class Paginator ...
随机推荐
- Stage 1 项目需求分析报告
迷你商城后台管理系统-- 需求分析 1. 引言 作为互联网热潮的崛起,消费者们的普遍差异化,实体商城要想在互联网的浪潮中继续发展,就需要制定出针对用户以及消费者的消费习惯以及喜爱品种的消费方案.从而企 ...
- Python-对Pcap文件进行处理,获取指定TCP流
通过对TCP/IP协议的学习,本人写了一个可以实现对PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鉴于为了学习,没有采用第三方包解析pcap,而是对bytes流进行解析,其核心思想 ...
- 关于panic ,主协程的recover 是无法获取 子协程的panic 的
一.子协程的panic,只能在子协程中处理 下面的代码,main 函数 无法获取panic package main import ( "fmt" "time" ...
- 「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!
前言 Graphical Demo框架提供了对平台相关依赖的抽象.Graphical应用的通用封装,如模型加载.纹理加载.着色器编译等,以及其它一些通用的应用逻辑处理的封装,使得使用框架的开发人员(以 ...
- P3645-[APIO2015]雅加达的摩天楼【bfs,根号分治】
正题 题目链接:https://www.luogu.com.cn/problem/P3645 题目大意 \(n\)个点,\(m\)条狗,第\(i\)条狗可以往左或者右跳恰好\(p_i\)步,开始是\( ...
- JavaScript 实现Sleep方法(多个setTimeout同步执行)
前言 JavaScript是单线程的,如果所有操作都是同步,必将线程堵塞,页面失去响应.因此JavaScript采用了事件驱动机制,在单线程模型下,使用异步回调函数的方式来实现非阻塞的IO操作.因此也 ...
- Python下载课件
from urllib.request import urlretrieve # #下载网络文件到本地 import os os.chdir("C:/Users/RankFan/Deskto ...
- MySQL8.0允许外部访问
MySQL8.0允许外部访问 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/h99 ...
- 实时获取股票数据,免费!——Python爬虫Sina Stock实战
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 实时股票数据的重要性 对于四大可交易资产:股票.期货.期权.数字货币来说,期货.期权.数字货币,可以从交 ...
- c++ fstream feekg讨论
#include <iostream> #include <fstream> using namespace std; int main() { std::ifstream f ...