玩转Django分页器

在这里插入图片描述

一、Pagination 分页器编程步骤

  1. View, 导入django.core.paginator.Paginator类,创建Paginator 对象时,输入qs对象,以及每页显示条数。

  2. 接收 URL, 从请求参数中读取page数值 ,通过 paginator.page(page_num) 返回请求页的page_obj.

  3. 模板中,用page_obj的属性来编写分页器HTML代码

分页器功能的两个主要数据结构: Paginator 对象, Page对象。

参考实例: https://simpleisbetterthancomplex.com/tutorial/2016/08/03/how-to-paginate-with-django.htmlexample

from django.core.paginator import Paginator #import Paginatordef movies(request):movies = Movie.objects.all() #queryset containing all movies we just createdpaginator = Paginator(movies, 3)  # 每页3行记录page_number = request.GET.get('page')page_obj = paginator.get_page(page_number)return render(request=request, template_name="main/movies.html", context={'movies':page_obj})

在这里插入图片描述

二、Paginator 对象

paginator 类对象的属性

per_page 每页显示条数。

count, num_pages

page_range, 页面的迭代器

Paginator 对象的方法

Paginator.get_page(number) 返回 page_obj , 页号从1开始

Paginator.page(number) 同上。

三、 Page对象

主要属性

object_list , 即queryset 数据

number, 当前页号

previous_page_number, next_page_number

主要方法

has_next(), has_previous(), next_page_number(), 等, page2.previous_page_number()

>>> page1 = p.page(1)
>>> page1
<Page 1 of 2>
>>> page2 = p.get_page(2)>>> page2.has_next()
False
>>> page2.has_previous()
True
>>> page2.has_other_pages()
True
>>> page2.next_page_number()
Traceback (most recent call last):
...
EmptyPage: That page contains no results
>>> page2.previous_page_number()
>>> page2.start_index()  # The 1-based index of the first item on this page
3
>>> page2.end_index()  # The 1-based index of the last item on this page
4

三、分页功能实现

1、URL请求参数携带 page 参数

如:

http://127.0.0.1:8000/books/borrow/?page=1

2、视图中实现分页器,返回页面对象

from django.core.paginator import Paginator #import Paginatordef movies(request):movies = Movie.objects.all() #queryset containing all movies we just createdpaginator = Paginator(movies, 10)  # 每页10行记录page_number = request.GET.get('page')page_obj = paginator.get_page(page_number)return render(request=request, template_name="main/movies.html", context={'movies':page_obj})

说明:

 paginator = Paginator(movies, 10)  # 每页10行记录

表示创建分页器对象,构造器传入查询结果,以及每页显示行数。

page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)

请求参数page表示请求的页号,获取该页的页面对象page_obj

return render(request=request, template_name="main/movies.html", context={'movies':page_obj})

将page_obj 页面对象做为context上下文传给模板渲染。

3、模板中实现分页器渲染

数据列表显示部分

page_obj 页面对象中包含了当前页的object对象列表,用 for …in… 遍历。

{% for obj in page_obj %}{{ obj.name }} {% endfor %}`
分页器栏用用a标签实现分页器跳转

Page对象传入模板后,需要编写html分页器代码,判断是否有上下页, 并传回下次请求的页号

    <div class='pagination'><span class="step-links">{% if page_obj.has_previous %}<a href="?page=1">&laquo; 首页</a><a href="?page={{ page_obj.previous_page_number }}">上页</a>    {% endif %}<span class="current">当前页 {{ page_obj.number }} / {{ page_obj.paginator.num_pages }}.</span>{% if page_obj.has_next %}<a href="?page={{ page_obj.next_page_number }}">下页</a><a href="?page={{ page_obj.paginator.num_pages }}">末页 &raquo;</a>{% endif %}</div>

4、支持用户自定义每页显示行数

有时,用户希望自己控制每页显示行数,可以在GET请求参数中,携带 page_size=xxx, 如

http://127.0.0.1:8000/books/borrow/?page=1&page_size=20

视图函数中,令 paginator.per_page = request.GET[‘page_size’], 即可支持前端修改每页显示条数。

完整示例代码

views.py

from django.core.paginator import Paginator
from django.shortcuts import render
from myapp.models import Contactdef listing(request):contact_list = Contact.objects.all()paginator = Paginator(contact_list, 25)  # Show 25 contacts per page.if 'page_size' in request.GET.keys(): paginator.per_page = request.GET['page_size'],page_number = request.GET.get("page")page_obj = paginator.get_page(page_number)return render(request, "list.html", {"page_obj": page_obj})

对于通用视图, 重载get()方法

class BorrowListView(ListView):model = Borrowtemplate_name = "books/borrow_list.html"paginate_by = 10      # 默认传至template的context名称为page_objdef get(self, request, *args, **kwargs):if 'page_size' in request.GET.keys():self.paginate_by = request.GET['page_size']return super().get(request, *args, **kwargs)

list_contact.html

{% extends "myapp/base.html" %}{% block content %}
{% for contact in page_obj %}{# Each "contact" is a Contact model object. #}{{ contact.full_name|upper }}<br>...
{% endfor %}<div class='pagination'><span class="step-links">{% if page_obj.has_previous %}<a href="?page=1">&laquo; 首页</a><a href="?page={{ page_obj.previous_page_number }}">上页</a>    {% endif %}<span class="current">当前页 {{ page_obj.number }} / {{ page_obj.paginator.num_pages }}.</span>{% if page_obj.has_next %}<a href="?page={{ page_obj.next_page_number }}">下页</a><a href="?page={{ page_obj.paginator.num_pages }}">末页 &raquo;</a>{% endif %}</div>{% endblock content %}

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

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

相关文章

从 PG 技术峰会南京站汲取的那些干货

3月30日下午&#xff0c;“PostgreSQL 数据库技术峰会”南京站圆满举办。 这场峰会同步在线上直播&#xff0c;近 2000 人在线观看。 感谢各位大佬带来精彩演讲。 1. 可观测性 第一场正式演讲是白鳝前辈带来的《PostgreSQL 数据库的可观测性能力》。 数据库的可观测性的重要性不…

Mysql数据库:MHA高可用架构

目录 前言 一、MHA概述 1、什么是MHA 2、MHA的特点 3、MHA的组成 4、MHA的工作原理 5、故障切换备选主库的算法 二、部署MHA高可用架构 1、环境部署 2、部署主从同步 2.1 修改主配置文件并创建软链接 2.1.1 master 修改主配置文件并创建软连接 2.1.2 slave1 修改主…

算法学习——LeetCode力扣补充篇5 (52. N 皇后 II、649. Dota2 参议院、1221. 分割平衡字符串、5. 最长回文子串)

算法学习——LeetCode力扣补充篇5 52. N 皇后 II 52. N 皇后 II - 力扣&#xff08;LeetCode&#xff09; 描述 n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的…

免费!微软推出全球第一个生成式AI认证

微软在官网宣布一项新的人工智能计划&#xff0c;包括与 LinkedIn联合推出免费的生成式AI课程和专业认证证书&#xff1b;微软与数据平台data.org、开源社区GitHub 等合作&#xff0c;发一起全球生成式AI挑战赛&#xff0c;为参赛的组织提供资金、技术、培训等帮助。 用户学习…

文生图大模型三部曲:DDPM、LDM、SD 详细讲解!

1、引言 跨模态大模型是指能够在不同感官模态(如视觉、语言、音频等)之间进行信息转换的大规模语言模型。当前图文跨模态大模型主要有&#xff1a; 文生图大模型&#xff1a;如 Stable Diffusion系列、DALL-E系列、Imagen等 图文匹配大模型&#xff1a;如CLIP、Chinese CLIP、…

力扣刷题Days28-第二题-11.盛水最多的容器(js)

目录 1&#xff0c;题目 2&#xff0c;代码 3&#xff0c;学习与总结 3.1思路回顾 1&#xff0c;如何遍历 2&#xff0c;算法流程 3.2剖析问题 1&#xff0c;题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, h…

Keil界面乱了,某些图标消失

文章目录 如图 如图 我都不知道怎么搞的第一个 重启界面解决了

学习【零拷贝】这一篇就够了

目录 1. 什么是零拷贝2. 传统的IO执行流程3. 零拷贝相关知识3-1. 内核空间和用户空间3-2. 什么是用户态、内核态3-3. 什么是上下文切换3-4. 虚拟内存3-5. DMA技术 4. 零拷贝实现的几种方式4-1. mmapwrite实现的零拷贝4-2. sendfile实现的零拷贝4-3. sendfileDMA scatter/gather…

深度学习网络缝合模块学习

主干网络缝合模块------>缝模块对其通道数 1缝合模块只看通道数 2把模块复制到模型中 3在forward中查看通道数是多少 4在init中进行实例化&#xff0c;注意通道数是上一步forward的通道数 5在forward中加载init中的实例化 6模型实例化测试模块是否加入 模块和模块之前…

程序数据模型由OS还是硬件架构决定?

文章目录 前言硬件架构的作用OS的作用编译器的角色OS的数据模型参考 前言 在文章 1>>32的结果是1还是0 中提到了数据模型 L P 64 LP64 LP64 &#xff0c;并提出这个数据模型主要是由 U n i x Unix Unix 以及类 U n i x Unix Unix 的操作系统使用居多&#xff0c;例如…

C++教学——从入门到精通 6.ASCII码与字符型

如何把小写字母转换成大写字母呢&#xff1f; 这个问题问的好&#xff0c;首先我们要新学一个类型——char 这个类型就是字符型 再来说说ASCII码 给大家举几个例子 空格————32 0————48 9————57 A————65 Z————90 a————97 z————122 我们…

若依框架学习使用

若依官网项目拉取下来介绍 | RuoYi 项目运行&#xff1a; 1.idea安装&#xff0c;可以运行前后端 编辑器idea、jdk环境安装、数据库mysql、navicat工具、redis(redis-server启动)安装 2.navicat数据库连接, 创建数据库ry-vue并导入数据脚本ry_2021xxxx.sql&#xff0c;qua…

二. CUDA编程入门-Stream与Event

目录 前言0. 简述1. 执行一下我们的第九个CUDA程序2. Stream是什么3. Streams实验(单流vs多流)4. 如何隐藏延迟(memory)5. 如何隐藏延迟(kernel)6. 如何隐藏延迟(kernelmemory)7. 代码分析总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记…

MD5 计算 (下一代加密辅助类, Win32, C++)

CCNGHelper.h #pragma once #include <string> #include <tchar.h> #include <windows.h> #include <bcrypt.h>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 下一代加密辅助类 // 客户端: Windows Vi…

7种2024年算法优化BP,实现回归,单/多变量输入,单/多步预测功能,机器学习预测全家桶再更新!...

截止到本期MATLAB机器学习预测全家桶&#xff0c;一共发了19篇关于机器学习预测代码的文章。算上这一篇&#xff0c;一共20篇&#xff01;参考文章如下&#xff1a; 1.五花八门的机器学习预测&#xff1f;一篇搞定不行吗&#xff1f; 2.机器学习预测全家桶&#xff0c;多步预测…

wails 创建Go 项目

##wails是一个可以让go和web技术编写桌面应用#安装wails go install github.com/wailsapp/wails/v2/cmd/wailslatest#检查环境 wails doctor 创建项目wails init -n AuxiliaryTools -t vue-ts拉取go.mod的依赖项 go mod tidy进入 frontend 前端安装依赖项npm install /pnpm ins…

自定义微信红包封面小程序,附带后端源码,快速制作个性化红包封面

此小程序适合流量主引流&#xff0c;赚广告费&#xff0c;适合广流量主&#xff0c;适合流量主。 采用云开发&#xff0c;无需服务器&#xff0c;无需域名。小程序里插入banner广告&#xff0c;插屏广告&#xff0c;视频广告&#xff0c;激励式广告。邀请好友获取抽奖机会&…

医院陪诊管理系统(源码+文档)

TOC) 文件包含内容 1、搭建视频 2、流程图 3、开题报告 4、数据库 5、参考文献 6、服务器接口文件 7、接口文档 8、任务书 9、功能图 10、环境搭建软件 11、十六周指导记录 12、答辩ppt模板 13、技术详解 14、前端后台管理&#xff08;管理端程序&#xff09; 15、项目截图 1…

2024中国(杭州)国际数字物流技术与应用展览会将于7月8日举办

2024中国&#xff08;杭州&#xff09;国际数字物流技术与应用展览会 2024年7月8-10日 | 杭州国际博览中心 同期举办&#xff1a;2024长三角快递物流供应链与技术装备展览会 数字贸易创新引领合作动能 《十四五规划》明确指出关于“加快数字化发展&#xff0c;建设数字中国…

代码第三十五天-子集Ⅱ

子集Ⅱ 题目要求 解题思路 回溯法 一般情况下&#xff0c;看到题目要求[所有可能的结果]&#xff0c;而不是[结果的个数]&#xff0c;我们就知道需要暴力搜索所有的可行解了&#xff0c;可以使用[回溯法] 回溯法是一种算法思想&#xff0c;而递归式一种编程方式&#xff0c;回…