Django - 分页器
一.分页器:
知识点先览
Paginator:Django分页器bulk_create:批量插入数据paginator.count:数据总数,其中paginator是分页器实例化对象paginator.num_pages:总页数paginator.page_range:页码的列表object_list:分页之后的数据列表has_next:是否有下一页next_page_number:下一页页码has_previous:是否有上一页previous_page_number:上一页页码
models.py
from django.db import models# Create your models here.class Book(models.Model):title = models.CharField(max_length=32)price = models.DecimalField(max_digits=8,decimal_places=2)
views.py
# -*- encoding:utf-8 -*- from django.shortcuts import render# Create your views here. from app01.models import Bookfrom django.core.paginator import Paginator,EmptyPage # 导入分页器def index(request):# 方法不好,每次都要插入数据,需要插入100次# for i in range(100):# Book.objects.create(title="book_%s"%i,price=i*i)# 批量插入,导入到数据库里 bulk_create'''book_list = []for i in range(100):book_obj = Book(title="book_%s"%i,price=i*i)book_list.append(book_obj)Book.objects.bulk_create(book_list)'''book_list = Book.objects.all() # 拿到所有书籍数据# 分页器paginator = Paginator(book_list,8) # 第一个参数是需要分页的列表,第二个是每页需要展示的数目print(paginator.count) # 数据总数print(paginator.num_pages) # 总页数print(paginator.page_range) # 页码的列表,总页数+1# 100# 13# range(1, 14) page1 = paginator.page(1) # 第一页的page对象,固定死了# 动态显示try:current_page_num = int(request.GET.get("page", 1)) # get数据是通过?连接的 http://127.0.0.1:8000/index/?page=2#做成一个动态的效果。给它个默认值拿第一页,不加1就会返回一个None。当前想要的第几页的数据 current_page = paginator.page(current_page_num) # 拿到第几页的page对象# 显示每一页具体数据的两种方式print("object_list",page1.object_list)# object_list < QuerySet[ < Book: Book object (1) >, < Book: Book object (2) >, < Book: Book object (3) >,# < Book: Book object (4) >, < Book: Book object (5) >, < Book: Book object (6) >, < Book: Book object (7) >,# < Book: Book object (8) >] >for i in page1:print(i)# Book object (1)# Book object (2)# Book object (3)# Book object (4)# Book object (5)# Book object (6)# Book object (7)# Book object (8)except EmptyPage as e:current_page = paginator.page(1)return render(request,"index.html",locals())
index.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title><!-- 最新版本的 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> </head> <body><p3>index</p3>{# 显示当前页面的书籍信息 #}<ul>{% for book in current_page %}<li>{{ book.title }}:{{ book.price }}</li>{% endfor %}</ul><nav aria-label="Page navigation"> // 分页的页面<ul class="pagination">{# 无法显示上一页和下一页 #} {# <li>#} {# <a href="?page={{ current_page_num|add:-1 }}" aria-label="Previous">#} // 上一页:当前页码减一 --> href="?page={{current_page_num|add:-1}}" {# <span aria-hidden="true">上一页</span>#} {# </a>#} {# </li>#}{% if current_page.has_previous %} // 判断当前页面是否还有上一页<li><a href="?page={{ current_page.previous_page_number }}" aria-label="Previous"> // 获得当前页面上一页的页码<span aria-hidden="true">上一页</span></a></li>{% else %}<li class="disabled"> {# bootstrap设置disabled 不能点击#} // 上一页没数据就不能点击<a href="#" aria-label="Previous"><span aria-hidden="true">上一页</span></a></li>{% endif %}{% for item in paginator.page_range %} // item为数字,这里不应该写死 --> page_range{#{% for item in page_range %}#}{% if current_page_num == item %} {# 判断当前页码是否和循环的页码一致 bootstrap设置的active会显示深色, #}<li class="active"><a href="?page={{ item }}">{{ item }}</a></li>{% else %}<li><a href="?page={{ item }}">{{ item }}</a></li>{% endif %}{% endfor %}{# <li>#} {# <a href="?page={{ current_page_num|add:1 }}" aria-label="Next">#} {# <span aria-hidden="true">下一页</span>#} {# </a>#} {# </li>#}{% if current_page.has_next %} // 判断当前页面是否还有下一页<li><a href="?page={{ current_page.next_page_number }}" aria-label="Next"> // 获得下一页页面的页码<span aria-hidden="true">下一页</span></a></li>{% else %}<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">下一页</span></a></li>{% endif %}</ul></nav></body> </html>
改进版:
views.py
# -*- encoding:utf-8 -*- from django.shortcuts import render# Create your views here. from app01.models import Bookfrom django.core.paginator import Paginator,EmptyPage # 导入分页器def index(request):# 方法不好,每次都要插入数据,需要插入100次# for i in range(100):# Book.objects.create(title="book_%s"%i,price=i*i)# 批量插入 bulk_create'''book_list = []for i in range(100):book_obj = Book(title="book_%s"%i,price=i*i)book_list.append(book_obj)Book.objects.bulk_create(book_list)'''book_list = Book.objects.all()# 分页器paginator = Paginator(book_list,3) # 第一个参数是需要分页的列表,第二个是每页需要展示的数目print(paginator.count) # 数据总数print(paginator.num_pages) # 总页数print(paginator.page_range) # 页码的列表,总页数+1# 100# 13# range(1, 14) page1 = paginator.page(1) # 第一页的page对象,固定死了# 动态显示 current_page_num = int(request.GET.get("page", 1)) # get数据是通过?连接的 http://127.0.0.1:8000/index/?page=2# 固定页码数居中if paginator.num_pages > 11:if current_page_num - 5 < 1: ## 点1,2,3,4,5,6页码不动,点7开始左五右五,点倒数五个页面不动page_range = range(1,12)elif current_page_num + 6 > paginator.num_pages:page_range = range(paginator.num_pages-10,paginator.num_pages+1)else:page_range = range(current_page_num-5,current_page_num+6)else:page_range = paginator.page_rangetry:current_page = paginator.page(current_page_num)# 显示每一页具体数据的两种方式print("object_list",page1.object_list)# object_list < QuerySet[ < Book: Book object (1) >, < Book: Book object (2) >, < Book: Book object (3) >,# < Book: Book object (4) >, < Book: Book object (5) >, < Book: Book object (6) >, < Book: Book object (7) >,# < Book: Book object (8) >] >for i in page1:print(i)# Book object (1)# Book object (2)# Book object (3)# Book object (4)# Book object (5)# Book object (6)# Book object (7)# Book object (8)except EmptyPage as e:current_page = paginator.page(1)return render(request,"index.html",locals())
index,html
{% for item in page_range %} 不应该写死,其他同上{% if current_page_num == item %}<li class="active"><a href="?page={{ item }}">{{ item }}</a></li>{% else %}<li><a href="?page={{ item }}">{{ item }}</a></li>{% endif %}{% endfor %}
转载于:https://www.cnblogs.com/mumupa0824/p/10361854.html
Django - 分页器相关推荐
- Django分页器和自定义分页器
一.自定义分页器 import copyclass Pagination():def __init__(self,request,current_page,all_data_num,each_page ...
- python web:Django分页器的使用
django自带分页器,当我们使用时需要先将其导入之后,使用用法如下 #views.py #导入Paginator from django.core.paginator import Paginato ...
- django分页器Paginator的基本使用
Paginator基础知识: 说明:为了方便,这部分我没有使用QuerySet做数据源,而是用一个列表做数据源 from django.core.paginator import Paginator# ...
- Django 分页器模板
返回链接: djang ORM 分页器模板: class Pagination(object):def __init__(self,current_page,all_count,per_page_nu ...
- python 全栈开发,Day79(Django的用户认证组件,分页器)
一.Django的用户认证组件 用户认证 auth模块 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中: 如果用户存在于数据库中,然后再验证用户 ...
- html分页器的实现原理,Django之分页器
Django自带分页器的实现 介绍 Django提供了一个新的类来帮助你管理分页数据,这个模块存放在django.core.paginator.py. 其中有两个核心类,一个是Paginator类,另 ...
- django-pagination---七步教你实现Django网站列表自动分页
网站,特别是论坛,就如本社区一样,肯定会遇到某个页面要显示列表(比如本社区的首页,要显示主题列表),那肯定就会涉及到列表的分页功能. 举个例子,比如一个列表有100个item,那我们网站的页面是不是将 ...
- django框架全解
目录 简介 MVC与MTV模型 MVC MTV 创建项目 目录 生命周期 静态文件配置(无用) 启动django 路由 分组 无名分组 有名分组 路由分发 反向解析 反向解析结合分组 名称空间 re_ ...
- Django--分页器(paginator)
1 Django的分页器(paginator)简介 在页面显示分页数据,需要用到Django分页器组件 from django.core.paginator import Paginator Pagi ...
最新文章
- python function if yield_Python中的yield关键字
- 两款爱不释手的markdown编辑工具
- oracle 整个表空间迁移,ORACLE表批量迁移表空间
- 职场中一路走来却拂不去一丝失落——一个女IT的告白
- PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——深度学习简介
- 《走遍中国》珍藏版(二)
- bbb 烧写脚本分析
- 计算机基础知识二进制转换,计算机基础知识数制转换
- php太平洋时间转成北京时间,北京时间 → 太平洋时间 换算表 和太平洋时间 → 北京时间 换算表...
- 【C++】日期类题目总结
- 大学四年对比度:看的见的青春渐变
- 录制失败因为媒体服务失败_杨丽萍62岁被判人生失败,因为她一生无子女.........
- ZooKeeper源码分析之完整网络通信流程(一)
- 矩阵指数 matlab,空间计量-矩阵指数空间模型
- Linux报错-ssh_exchange_identi...
- HMI智能座舱自动化测试之性能测试
- Luogu P4844 LJJ爱数数
- 数据结构--简易图书管理模拟系统
- SQL—分组数据(GOUP BY)
- 2021/4/27课堂总结和作业
热门文章
- CentOS6.3 x86_64 mininstall 安装 apahce2.23+jdk1.7+tomecat7+mysql5.1.58
- 云时代的安全解读:云安全≠云计算安全
- IEnumerable是否应该实现IEnumerable接口
- JavaScript中的nodeName nodeType nodeValue区别
- linux下的strerror和perror
- 防止头文件的重复包含
- shell实例第3讲:获取随机8位数字
- 跟着 Alex 学python 1.安装
- .NET Core微服务之基于Ocelot实现API网关服务(续)
- JavaScript-2(数组与字符串的方法)