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 ...
随机推荐
- linux系统--用户和用户组
一.用户和用户组的概念 用户:使用操作系统的人 用户组:具有相同系统权限的一组用户.在linux系统中可以存在多个用户组 1.1 /etc/group 这里存储当前系统中所有用户组的信息 每一行对应一 ...
- jenkins配置sonarqube
jenkins配置sonarqube 下载插件SonarQube Scanner for Jenkins 在系统管理系统设置中选择 SonarQube servers 配置服务器名称.访问URL地址, ...
- iOS视频流开发(1)—视频基本概念
iOS视频流开发(1)-视频基本概念 手机比PC的优势除了便携外,她最重要特点就是可以快速方便的创作多媒体作品.照片分享,语音输入,视频录制,地理位置.一个成功的手机APP从产品形态上都有这其中的一项 ...
- Androidstudio中jar包重复或jar包里的类重复问题
https://www.jianshu.com/p/dd5d4fda1df8 http://blog.csdn.net/hqb112233/article/details/51514208
- NSURLResponse下载
// // ViewController.m // 05-NSURLConnestion(下载) // // Created by jerry on 15/10/24. // Copyright (c ...
- UML和模式应用5:细化阶段(2)--细化阶段制品之领域模型
1.前言 领域模型是OO分析中最重要和经典的模型.它阐述了领域中的重要概念: 领域模型作为设计某些软件对象的重要来源,也作为案例研究中探讨的几个制品的输入: 领域模型的范围限定于当前迭代开发的用例场景 ...
- UML和模式应用4:初始阶段(3)--需求制品之用例模型
1. 前言 UP开发包括四个阶段:初始阶段.细化阶段.构建阶段.移交阶段: UP每个阶段包括 业务建模.需求.设计等科目: 其中需求科目对应的需求制品包括:设想.业务规则.用例模型.补充性规格说明.词 ...
- 【.net】获取网页CDM的下载链接的地址
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServi ...
- root权限使用vim不能修改权限
1.背景: 有时候我们会发现使用root权限不能修改某个文件,大部分原因是曾经使用chattr将文件锁定了 2.chattr命令介绍: 用来改变文件属性,能防止root用户误删文件等作用 3.使用方法 ...
- robotium之不标准select控件
今天写脚本,遇到一个联合查询框 即:下拉框选择,输入框输入搜索条件,点击查询按钮 如图样式: 用uiautomatorviewer查看元素:无ID,无name,无desc 看到这我瞬间尴尬了,该咋办呢 ...