Django的分页和中间件
一、分页
Django的分页器(paginator)
view.py
from django.shortcuts import render,HttpResponse # Create your views here. from app09 import models # 导入分页模块
from django.core.paginator import Paginator
# 做分页
# 分页器的对象,需要传object_list(要分页的所有数据queryset对象), per_page(每页要显示的个数), def paginator(request):
book_l = models.Book.objects.all().order_by('pk')
paginator = Paginator(book_l, 40) try:
#只写page,默认是none,我们默认是第一页。
currentpage = int(request.GET.get('page',1))
# page传个页码数,比如传1,就是每一页的对象,paginator相当于一本书,paginator.page就相当于书的具体的哪一页 # 取出书的第一页,第一页的对象,page是每一页的对象
# page = paginator.page(1) page = paginator.page(currentpage)
except Exception as e:
#如果输入法的不合法就显示第一页,就不会报错
currentpage = 1
page = paginator.page(currentpage) #传入页码数,拿到的就是当前页对象
page = paginator.page(currentpage) # page_range = paginator.page_range #1 总页数是否大于11,当总页码数大于11时
if paginator.num_pages >11:
#1.1 当前页码数是否小于6
if currentpage <=6:
#1.1.1 当前页码数小于6的时候,就生成11个页码数
page_range = range(1,12)
#1.2 当前页码数+5大于总页码数
elif currentpage + 5 >= paginator.num_pages:
# 1.2.1 往后推11页页码数
page_range = range(paginator.num_pages - 10,paginator.num_pages + 1)
# 1.3 当前页码数大于6,就生成一个左5 右5的区间
else:
page_range = range(currentpage - 5,currentpage + 6)
#2 总页码数不大于11的是有,页码有多少显示多少页码
else:
page_range = paginator.page_range # 总数据条数
print('总数据条数', paginator.count)
print('总页数', paginator.num_pages) # 需要在前端显示出来
print('页码的列表', paginator.page_range)
print('页码的列表', list(paginator.page_range)) # page传个页码数,比如传1,就是每一页的对象,paginator相当于一本书,paginator.page就相当于书的具体的哪一页 # 取出书的第一页,第一页的对象,page是每一页的对象
# page = paginator.page(1) # page = paginator.page(currentpage) # 每次从这一页中拿出一个个的书
# 在模板中for循环这个就可以拿出数据
# for book in page:
# print(book.name)
# print(page.has_next()) #是否有下一页
# print(page.next_page_number()) #是否有下一页的页码
# print(page.has_previous()) #是否有上一页
# print(page.previous_page_number()) #是否有上一页的页码 # 去写模板 return render(request, 'pagintaor.html', locals()) def booklist(request):
book_l = models.Book.objects.all() return HttpResponse('OK') # 批量生产数据
# def createbook(request):
# # 插入104本书(对象),先生成列表
# li = []
# for i in range(105):
# li.append(models.Book(name='honglpimeng%s'%i,price=1+i))
# res = models.Book.objects.bulk_create(li,20)
#
# return HttpResponse('OK') <><><><><><><><><<><><><><><><><><><><><><><><><><><><><><><><><><><><><>< HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{# 引入bootstrap#}
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
<title>Title</title>
</head>
<body> <table class="table table-bordered">
<thead>
<tr>
<th>序号</th>
<th>书名</th>
<th>价格</th>
</tr>
</thead>
<tbody>
{% for book in page %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ book.name }}</td>
<td>{{ book.price }}</td>
</tr> {% endfor %} </tbody> </table> {#//加分页 让有多少页就显示多少页#}
<nav aria-label="Page navigation">
<ul class="pagination">
{% if page.has_previous %}
<li>
{# <a href="/paginator/?page={{ page.previous_page_number }}" aria-label="Previous">#}
<a href="/paginator/?page={{ 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 foo in page_range %} {% if currentpage == foo %}
{# 变色,判断当前页面是不是循环到的页面,如果是加active#}
<li class="active"><a href="/paginator/?page={{ foo }}">{{ foo }}</a></li> {% else %}
<li><a href="/paginator/?page={{ foo }}">{{ foo }}</a></li> {% endif %} {% endfor %} {% if page.has_next %}
<li>
{# <a href="/paginator/?page={{ page.next_page_number }}" aria-label="Next">#}
<a href="/paginator/?page={{ 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>
<><><><><><><><><<><><><><><><><><><><><><><><><><><><><><><><><><><><><><
Django的分页和中间件的更多相关文章
- Python Django的分页,Form验证,中间件
本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...
- Django组件——分页器和中间件
分页器 Django内置分页器(paginator) 分页器函数为paginator,里面有几个重要的参数需要我们了解 paginator = Paginator(book_list, 10) #第二 ...
- Django【第10篇】:Django之分页初级版本
分页和中间件 一.分页 Django的分页器(paginator) view.py from django.shortcuts import render,HttpResponse # Create ...
- 第二十一章 Django的分页与cookie
第二十一章 Django的分页与cookie 第一课 模板 1.模板的继承 在Template目录下新建模板master.html <!DOCTYPE html> <html lan ...
- Django----列表分页(使用Django的分页组件)
目的:是为了实现列表分页 1.定制URL http://127.0.0.1:8000/blog/get_article?page=3之前定制URL是在url后增加了/id,这次使用参数的方式 def ...
- {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证
Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...
- Django WSGI,MVC,MTV,中间件部分,Form初识
一.什么是WSGI? WEB框架的本质是一个socket服务端接收用户请求,加工数据返回给客户端(Django),但是Django没有自带socket需要使用 别人的 socket配合Django才能 ...
- Django—自定义分页
分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...
- day 63 Django基础九之中间件
Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学 ...
随机推荐
- CentOS 7 安装telnet服务
今天测试zabbix需要用到telnet服务,查询到Centos7下下载安装telnet服务的方法,特此整理记录! 一.通过yum下载安装telnet yum -y install xinetd te ...
- MySql Undo Redo
Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC). - 事务的原子性(Atomicity) ...
- Oracle使用数据泵 (expdp/impdp)实施迁移
实验环境: 1.导出环境:RedHat6.4+Oracle 11.2.0.4.0,利用数据库自带的scott示例用户进行试验测试. Directory:wjq à /tmp/seiang_wjq 2. ...
- 从零开始搭建django前后端分离项目 系列四(实战之实时进度)
本项目实现了任务执行的实时进度查询 实现方式 前端websocket + 后端websocket + 后端redis订阅/发布 实现原理 任务执行后,假设用变量num标记任务执行的进度,然后将num发 ...
- odoo 11 配置nginx反向代理
第一步 安装nginx 和 certbot 具体步骤可以参考这篇文章的第6,7步. 第二步 配置nginx映射到odoo网站的文件,主要有2个,文件中的cloudapp.top是我们自己的域名, ...
- tkinter python(图形开发界面)
Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macinto ...
- 平均精度均值(mAP)——目标检测模型性能统计量
在机器学习领域,对于大多数常见问题,通常会有多个模型可供选择.当然,每个模型会有自己的特性,并会受到不同因素的影响而表现不同. 每个模型的好坏是通过评价它在某个数据集上的性能来判断的,这个数据集通常被 ...
- OO生存指南P1
写在OO作业之前 在正式写oo作业之前,先说一些“废话”吧,就当是对oo的吐槽. 事实上,早在大一的时候,听说数分很难,然而事实证明数分并没有有让我通宵的体验. 在大二上的时候有一门课叫祭祖,号称是第 ...
- Python学习第十篇——函数初步
def make_album(name,album_name,song_nums = 1): dict_album = {name:[album_name]} if int(song_nums) &g ...
- Array and Segments (Easy version) CodeForces - 1108E1 (暴力枚举)
The only difference between easy and hard versions is a number of elements in the array. You are giv ...