django第11天分页器

分页模块

批量插入数据
book_list = []
#先生成对象
for i in range(100):
book = Book(name = 'book%s'%i,price=10+i)
book_list.append(book)
#操作对象列表,设置一次操作多少条数据
Book.objects.bulk_create(book_list,10)

分页器及其方法

1.导入分页器模块
from django.core.paginator import Paginator 2.生成分页器对象
第一个参数为分页对象列表,第二个参数为一页的数量
paginator = Paginator(book_list,10) 3.分页常用方法
#分页对象的总数
count = paginator.count()
#分成的总页数
num_pages = paginator.num_pages()
#页数的范围
page_range = paginator.page_range #当前页面数从前台获取
try:
current_page_num = int(request.GET.get('page',1))
except:
current_page_num = 1 #通过当前页数,获得当前页的对象列表(返回给前台迭代显示对象)
current_page = paginator.page(current_page_num) # 是否有上一页
current_page.has_previous()
# 上一页编码
current_page.previous_page_number()
# 是否有下一页
current_page.has_next()
# 下一页编码
current_page.next_page_number()

基础分页器编写

1.后台

from django.core.paginator import Paginator

def index(request):
#获取图书对象
book_list = Book.objects.all()
#生成分页器对象
paginator = Paginator(book_list,10)
#获取页码范围,以便前台产生分页个数
page_range = paginator.page_range
#从前台获取当前页数,如果是第一次访问就返回第一页
try:
current_page_num = int(request.GET.get('page',1))
except:
current_page_num =1
#通过当前页数,获得current_page,可迭代获得当前页所有对象
current_page = paginator.page(current_page_num)
return render(request,'index.html',locals()) 前台
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1>图书详情</h1>
<table class="table">
<tr>
<th>图书名称</th>
<th>图书价格</th>
</tr>
#仅展示当前页数的所有对象
{% for book in current_page %}
<tr>
<td>{{ book.name }}</td>
<td>{{ book.price }}</td>
</tr>
{% endfor %}
</table>
<nav aria-label="Page navigation">
<ul class="pagination">
<li>
#如果存在上一页,当前页码减去1
{% if current_page.has_previous %}
<a href="?page={{ current_page_num|add:-1 }}" aria-label="Previous">
{% else %}
#如果不存在不进行操作
<a href="javascript:void(0)" aria-label="Previous">
{% endif %}
<span aria-hidden="true">上一页</span>
</a>
</li>
#通过页数生成分页项
{% for foo in page_range %}
<li>
<a href="?page={{ foo }}">{{ foo }}</a></li>
<li>
{% endfor %}
<li>
{% if current_page.has_next %}
<a href="?page={{ current_page_num|add:1 }}" aria-label="Next">
{% else %}
<a href="javascript:void(0)" aria-label="Next">
{% endif %}
<span aria-hidden="true">下一页</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>

高级分页器编写

当对象个数过多,分的页数过多时,需要将分页器优化,不然会显示一大堆的分页

设计要求:
除了首末页,只显示选中页数,前5页和后5页
前台:
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1>图书详情</h1>
<table class="table">
<tr>
<th>图书名称</th>
<th>图书价格</th>
</tr>
{% for book in current_page %}
<tr>
<td>{{ book.name }}</td>
<td>{{ book.price }}</td>
</tr>
{% endfor %}
</table>
<nav aria-label="Page navigation">
<ul class="pagination">
<li>
{% if current_page.has_previous %}
<a href="?page={{ current_page_num|add:-1 }}" aria-label="Previous">
{% else %}
<a href="javascript:void(0)" aria-label="Previous">
{% endif %}
<span aria-hidden="true">上一页</span>
</a>
</li>
{% if current_page_num == 1 %}
<li class="active">
{% else %}
<li>
{% endif %}
<a href="?page=1">1</a></li>
{% if num_pages > 14 %}
<li><a href="javascript:void(0)">...</a></li>
{% endif %}
{% for num in page_range %}
{% if current_page_num == num %}
<li class="active">
{% else %}
<li>
{% endif %}
<a href="?page={{ num }}">{{ num }}</a></li>
{% endfor %}
{% if num_pages > 13 %}
<li><a href="javascript:void(0)">...</a></li>
{% endif %} {% if current_page_num == num_pages %}
<li class="active">
{% else %}
<li>
{% endif %}
<a href="?page={{ num_pages }}">{{ num_pages }}</a></li>
<li>
{% if current_page.has_next %}
<a href="?page={{ current_page_num|add:1 }}" aria-label="Next">
{% else %}
<a href="javascript:void(0)" aria-label="Next">
{% endif %}
<span aria-hidden="true">下一页</span>
</a>
</li>
</ul>
</nav>
</div> </div>
</div> 后台:
def index(request):
book_list = Book.objects.all()
paginator = Paginator(book_list,6)
count = paginator.count
num_pages = paginator.num_pages
page_range = paginator.page_range
try:
current_page_num = int(request.GET.get('page',1))
except:
current_page_num =1
current_page = paginator.page(current_page_num)
if num_pages > 13:
if current_page_num <7 :
page_range = range(2,12)
elif current_page_num +6 > num_pages:
page_range = range(num_pages-10,num_pages)
else:
page_range = range(current_page_num-5,current_page_num+6)
else:
page_range = range(2,13)
return render(request,'index.html',locals())

django第11天(分页器)的更多相关文章

  1. xadmin在Django 1.11中的使用及中英文切换

    版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com xadmin是一个强大的替代django admin的管理后台,github地址为:https://g ...

  2. angular 4 和django 1.11.1 前后端交互 总结

    首先 angular4 和django 1.11.1交互 有跨域问题 所以先关闭cors 和csrf验证 一.解决跨域问题 cors github django-cors-headers 1)安装co ...

  3. Ubuntu 16.04 安装 Django==1.11.8

    vim  InStall-Django.sh #!/bin/bash rm -rf /usr/bin/python ln -s /usr/bin/python3 /usr/bin/python mkd ...

  4. Django框架11 /form组件、modelForm组件

    Django框架11 /form组件.modelForm组件 目录 Django框架11 /form组件.modelForm组件 1. form组件介绍 2. form常用字段与插件 3. form所 ...

  5. django 1.11.16之环境搭建

    django版本:django1.11.16  windows环境 python 3.6.3    !!!可先安装虚拟环境在进行环境搭建  1.安装django:pip install django= ...

  6. Django与ajax、分页器

    ajax简单数据响应 ajax请求,后台只需要返回信息,所以不会出现render.redirect 模板层: $('.btn').click(function() { $.ajax({ url: '/ ...

  7. Django 1.11 release note简明解读

    1.首先1.11这个版本是一个LTS版本 2.第一个支持python3.6的版本,最后一个支持python2.*的版本 3.Deprecating warnings 默认不再显示,同时建议第三方包开始 ...

  8. 我希望知道的关于Django的11件事(转)

    英文原文:https://medium.com/cs-math/f29f6080c131 译文:http://my.oschina.net/chenlei123/blog/270672 两年前, 我开 ...

  9. Django常用组件之分页器

    目录 循环插入数据测试 实现分页器 视图层使用 模板层使用 循环插入数据测试 # ORM 帮我们提供了循环插入数据更快捷的方法: book_list = [] for i in range(1000) ...

随机推荐

  1. c# 参数传递问题(形参与实参)

    形参是指被调用方法中的参数 实参是指传递给方法的参数 (1)值类型传参是按值传递 值类型传参,形参接受到的是实参的一个副本,即形参发生变化,实参不会发生任何变化 (2)引用类型参数按值传递 当参数传递 ...

  2. A.走方格

    链接:https://ac.nowcoder.com/acm/contest/368/A 题意: 在一个n*n的方格中,你只能斜着走. 你还有一次上下左右走的机会 给你一个起点(sx,sy),和终点( ...

  3. Metasploits之ms10_018

    漏洞详情:https://technet.microsoft.com/library/security/ms10-018 一准备: 1:kali Linux系统 192.168.195.129 2:W ...

  4. SNMP消息传输机制

    1.引言 基于TCP/IP的网络管理包含3个组成部分: 1) 一个管理信息库MIB(Management Information Base).管理信息库包含所有代理进程的所有可被查询和修改的参数.RF ...

  5. python入门之前面内容拾遗

    int n1 = 123 #根据int类,创建了一个对象 n2 = int(123) #根据int类,创建了一个对象,这里实际上调用了int类里的内置函数__int__(x,2),其中x为定义的对象, ...

  6. [译]Understanding ECMAScript6 迭代器与生成器(未完)

    迭代器在许多编程语言中被作为一种更易处理数据集合的方式被使用.在ECMAScript6中,JavaScript添加了迭代器,将其作为此语言的一个重要特征.当再加上新的方法和新的集合类型(比如集合与映射 ...

  7. 1058 合唱队形 2004年NOIP全国联赛提高组

    1058 合唱队形 2004年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descripti ...

  8. SQL 时间日期函数

    1.获取当前日期GetDate getdate()函数以datetime数据类型的格式返回当前SQLServer服务器所在计算机的日期和时间.其语法格式为getdate().返回值舍入到最近的秒小数部 ...

  9. Perl 输出内容到 excel

    可以参考:  http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel/lib/Spreadsheet/WriteExcel.pm 使用Spre ...

  10. COGS 696. [IOI1996][USACO 2.3] 最长前缀

    ★   输入文件:prefix.in   输出文件:prefix.out   简单对比时间限制:1 s   内存限制:128 MB 描述 USACO 2.3.1 IOI96 在生物学中,一些生物的结构 ...