一.分页器:

知识点先览

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 - 分页器相关推荐

  1. Django分页器和自定义分页器

    一.自定义分页器 import copyclass Pagination():def __init__(self,request,current_page,all_data_num,each_page ...

  2. python web:Django分页器的使用

    django自带分页器,当我们使用时需要先将其导入之后,使用用法如下 #views.py #导入Paginator from django.core.paginator import Paginato ...

  3. django分页器Paginator的基本使用

    Paginator基础知识: 说明:为了方便,这部分我没有使用QuerySet做数据源,而是用一个列表做数据源 from django.core.paginator import Paginator# ...

  4. Django 分页器模板

    返回链接: djang ORM 分页器模板: class Pagination(object):def __init__(self,current_page,all_count,per_page_nu ...

  5. python 全栈开发,Day79(Django的用户认证组件,分页器)

    一.Django的用户认证组件 用户认证 auth模块 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中: 如果用户存在于数据库中,然后再验证用户 ...

  6. html分页器的实现原理,Django之分页器

    Django自带分页器的实现 介绍 Django提供了一个新的类来帮助你管理分页数据,这个模块存放在django.core.paginator.py. 其中有两个核心类,一个是Paginator类,另 ...

  7. django-pagination---七步教你实现Django网站列表自动分页

    网站,特别是论坛,就如本社区一样,肯定会遇到某个页面要显示列表(比如本社区的首页,要显示主题列表),那肯定就会涉及到列表的分页功能. 举个例子,比如一个列表有100个item,那我们网站的页面是不是将 ...

  8. django框架全解

    目录 简介 MVC与MTV模型 MVC MTV 创建项目 目录 生命周期 静态文件配置(无用) 启动django 路由 分组 无名分组 有名分组 路由分发 反向解析 反向解析结合分组 名称空间 re_ ...

  9. Django--分页器(paginator)

    1 Django的分页器(paginator)简介 在页面显示分页数据,需要用到Django分页器组件 from django.core.paginator import Paginator Pagi ...

最新文章

  1. python function if yield_Python中的yield关键字
  2. 两款爱不释手的markdown编辑工具
  3. oracle 整个表空间迁移,ORACLE表批量迁移表空间
  4. 职场中一路走来却拂不去一丝失落——一个女IT的告白
  5. PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——深度学习简介
  6. 《走遍中国》珍藏版(二)
  7. bbb 烧写脚本分析
  8. 计算机基础知识二进制转换,计算机基础知识数制转换
  9. php太平洋时间转成北京时间,北京时间 → 太平洋时间 换算表 和太平洋时间 → 北京时间 换算表...
  10. 【C++】日期类题目总结
  11. 大学四年对比度:看的见的青春渐变
  12. 录制失败因为媒体服务失败_杨丽萍62岁被判人生失败,因为她一生无子女.........
  13. ZooKeeper源码分析之完整网络通信流程(一)
  14. 矩阵指数 matlab,空间计量-矩阵指数空间模型
  15. Linux报错-ssh_exchange_identi...
  16. HMI智能座舱自动化测试之性能测试
  17. Luogu P4844 LJJ爱数数
  18. 数据结构--简易图书管理模拟系统
  19. SQL—分组数据(GOUP BY)
  20. 2021/4/27课堂总结和作业

热门文章

  1. CentOS6.3 x86_64 mininstall 安装 apahce2.23+jdk1.7+tomecat7+mysql5.1.58
  2. 云时代的安全解读:云安全≠云计算安全
  3. IEnumerable是否应该实现IEnumerable接口
  4. JavaScript中的nodeName nodeType nodeValue区别
  5. linux下的strerror和perror
  6. 防止头文件的重复包含
  7. shell实例第3讲:获取随机8位数字
  8. 跟着 Alex 学python 1.安装
  9. .NET Core微服务之基于Ocelot实现API网关服务(续)
  10. JavaScript-2(数组与字符串的方法)