7.Django|分页器
Django的分页器paginator
文件为pageDemo
models.py
from django.db import models # Create your models here.
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(decimal_places=2, max_digits=8)
views.py
from django.shortcuts import render # Create your views here.
from .models import Book
from django.core.paginator import Paginator, EmptyPage
def index(request):
'''
批量导入: #批量导入数据库文件里边
book_list = []
for i in range(100):
book = Book(title="book_%s"%i, price=i*i) #实例化一个book对象;
book_list.append(book) #实例化出100个对象;
Book.objects.bulk_create(book_list) #批量插入
return render(request, "index.html")
:param request:
:return:
'''
book_list = Book.objects.all() #拿到所有书籍数据
#分页器
paginator = Paginator(book_list, 8) #对谁分页,一页显示多少条数据 总的分页器对象
print("count:",paginator.count) #数据总数 打印:count:100
print("num_pages",paginator.num_pages) #总页数 num_pages:13
print("page_range",paginator.page_range) #页码的列表 page_range range(1,14) try: #page数字超了或者不在那个返回里就会抛出一个EmptyPage的错误
current_page_num = int(request.GET.get("page", 1)) #做成一个动态的效果。给它个默认值拿第一页,不加1就会返回一个None。当前想要的第几页的数据
current_page = paginator.page(current_page_num) #拿到第几页的page对象。
#显示某一页具体数据的两种方式:
print("object_list", current_page.object_list)
for i in current_page:
print(i)
except EmptyPage as e:
current_page=paginator.page(1) #拿到第一页的page对象
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.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<ul>
{% for book in current_page %}
<li>{{ book.title }}:{{ book.price }}</li>
{% endfor %}
</ul> <nav aria-label="Page navigation"> //分页的页面
<ul class="pagination">
{% if current_page.has_previous %} //上一页:当前页码-1 ---> href="?page={{current_page_num|add:-1}}或者下面这种写法 ;判断当前页是否还有上一页、下一页
<li><a href="?page={{ current_page.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">上一页</span></a></li>
{% else %}
<li class="disabled"><a href="" aria-label="Previous"><span aria-hidden="true">上一页</span></a></li> //没有上一页就不
{% endif %} {% for item in paginator.page_range %} //item为数字 这里不该写死-->page_range
{% if current_page_num == item %}
<li class="active"><a href="?page={{ item }}">{{ item }}</a></li> //也当前页码匹配成功了,加个class="active" 一点击谁颜色就会变深
{% else %}
<li><a href="?page={{ item }}">{{ item }}</a></li>
{% endif %}
{% endfor %} {% 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="Next"><span aria-hidden="true">下一页</span></a></li>
{% endif %} </ul>
</nav>
</body>
</html>
改进版
views
from django.shortcuts import render # Create your views here.
from .models import Book
from django.core.paginator import Paginator, EmptyPage
def index(request):
'''
批量导入:
book_list = []
for i in range(100):
book = Book(title="book_%s"%i, price=i*i)
book_list.append(book)
Book.objects.bulk_create(book_list) #匹配插入
return render(request, "index.html")
:param request:
:return:
'''
book_list = Book.objects.all()
#分页器
paginator = Paginator(book_list, 3)
print("count:",paginator.count) #数据总数
print("num_pages",paginator.num_pages) #总页数
print("page_range",paginator.page_range) #页码的列表 current_page_num = int(request.GET.get("page", 1))
if paginator.num_pages>11:
if current_page_num-5 < 1: ##点1、2、3、4、5页码不动,点7开始显示左5右5
page_range = range(1, 12)
elif current_page_num+5 > paginator.num_pages: #如果大于最大页码数
page_range = range(paginator.num_pages-10, paginator.num_pages+1)
else: else:
current_page = paginator.page_range try:
current_page_num = int(request.GET.get("page", 1))
current_page = paginator.page(current_page_num)
#显示某一页具体数据的两种方式:
print("object_list", current_page.object_list)
for i in current_page:
print(i)
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 %}
7.Django|分页器的更多相关文章
- Django分页器的设置
Django分页器的设置 有时候在页面中数据有多条时很显然需要进行分页显示,那么在python中django可以这样设置一个分页处理 怎么样去设置呢? 我们要用到 Django 中的 Pagin ...
- Django 分页器的使用
Django 分页器的使用 Django作为Python Web开发框架的一哥,提供了企业级网站开发所需要的几乎所有功能,其中就包括自带分页功能.利用Django自带的Paginator类,我们可以很 ...
- Django分页器和自定义分页器
一.自定义分页器 import copy class Pagination(): def __init__(self,request,current_page,all_data_num,each_pa ...
- django -----分页器组件
分页器组件 本文目录 1 Django的分页器(paginator)简介 2 应用View层 3 模版层 index.html 4 扩展 回到目录 1 Django的分页器(paginator)简介 ...
- Django 2.0 学习(19):Django 分页器
Django 分页器 要使用Django实现分页功能,必须从Django中导入Paginator模块(painator - 分页器) views.py from django.shortcuts im ...
- Django - Cookie、Session、自定义分页和Django分页器
2. 今日内容 https://www.cnblogs.com/liwenzhou/p/8343243.html 1. Cookie和Session 1. Cookie 服务端: 1. 生成字符串 2 ...
- Django 分页器 缓存 信号 序列化
阅读目录 分页器 缓存 信号 序列化 Django分页器 (paginator) 导入 from django.core.paginator import Paginator, EmptyPage, ...
- django分页器
网站页面的分页效果可以通过分页器实现 分页器的使用 urls.py from django.contrib import admin from django.urls import path from ...
- 7 Django分页器文章分页
1.复习 2.这节课要解决的问题? 3.分页的原理 4.准备工作 (1)创建Django项目 C:\Users\Administrator\Desktop\root3>django-admin ...
随机推荐
- luogu P1052 过河
传送门 容易想到设\(f_i\)表示走到坐标\(i\)的最少走过的石子数 但是这题数据范围很大,,, 不过一次可以走的步数范围是1-10,石子个数最多100个,所以中间会有很多多出来的没石子的路,可以 ...
- linux 链接理解
1.软链接 只包含另外软链接的基本信息, 生成与源文件不同的节点号, 可以链接目录.不同网络的文件 2.硬链接只能链接文件,不会生成节点号,说白了就是指针,指向同个文件,所以链接的节点号与源节点号一致
- 【转】利用URLConnection来发送POST和GET请求
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...
- MySQL或MariaDB忘记root密码
当我们忘记数据库密码时,我们可以通过如下来修改! 编辑配置文件(提前最好进行备份) 然后重启服务 systemctl restart mariadb 或者 systemctl restart mysq ...
- 解决kali linux 开启ssh服务后连接不上的问题
今天在手机端装了NetHunter 想连接PC的kali ,可是怎么都连不上 综合网友的经验: 1.修改sshd_config文件,命令为:vi /etc/ssh/sshd_config 将#Pass ...
- 简述JavaScript全局对象
全局对象是JavaScript中非常重要的一类对象,它作为程序顶层(程序最顶端,不包括在任何函数之内)的上下文存在,JavaScript中的全局属性.全局函数都是通过全局对象来提供给程序的,比如 全局 ...
- Linux系统编程【转】
转自:https://blog.csdn.net/majiakun1/article/details/8558308 一.Linux系统编程概论 1.1 系统编程基石 syscall: libc:标准 ...
- Raw Socket vs Stream Socket vs datagram socket,原始套接字与流式套接字与数据报套接字
https://opensourceforu.com/2015/03/a-guide-to-using-raw-sockets/ In this tutorial, lets take a look ...
- Java SSH远程执行Shell命令、shell脚本实现(Ganymed SSH)
jar包下载地址: http://www.ganymed.ethz.ch/ssh2/ 此源码的好处就是没有依赖很多其他的包,拷贝过来干干净净.具体代码实现可以看下文,或参考官方文档,在下载的压缩包里g ...
- 一步步实现windows版ijkplayer系列文章之四——windows下编译ijkplyer版ffmpeg
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...