分页

django中实现管理数据分页的类位于 django.core.paginator.py

Paginator类

对列表数据进行分页处理

对象

Paginator(Post.objects.all(),3)

Paginator(列表,int) 返回分页对象,专门处理分页(list集合,每页的数量)

属性

count     num_pages    page_range

paginator.count 所有页面的对象总数

paginator.num_pages 页面总数

paginator.page_range  页码列表

方法

page(num):下标以1开始的下标对象,如果提供的页码不存在,抛出InvalidPage异常

异常exception

InvalidPage:当向page()传入一个无效的页码时抛出

PageNotAnInteger:当向page()传入一个不是整数的值时抛出

EmptyPage:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出

Page对象

Paginator 对象的page() 方法返回Page对象

page = pageinator(1) 返回指定页

属性

page . object_list 获得当前页所有的数据+=对象的列表

Page . number 当前页的序号,从1 开始

Page. paginator  当前页page相关的Paginator对象

方法

has_next():如果有下一页返回True

has_previous():如果有上一页返回True

has_other_pages():如果有上一页或下一页返回True

next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常

previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常

Page.start_index()[source]返回当前页上的第一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,将五个对象的列表分为每页两个对象,第二页的start_index()会返回3。

Page.end_index()[source]返回当前页上的最后一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,将五个对象的列表分为每页两个对象,第二页的end_index() 会返回 4。

len():返回当前页面对象的个数

迭代页面对象:访问当前页面中的每个对象

案例

method 最多显示5 页

@staticmethod
def get_posts_by_page(num,per_page=1):
num = int(num)
pagintor = Paginator(Post.objects.order_by('-modified').all(),per_page)
if num <1:
num =1
if num > pagintor.num_pages:
num =pagintor.num_pages
page = pagintor.page(num) # 最多显示5页
# range =[ )
pervious= 2
last = 2
#如果当前页为 1 或2 时范围
if num <=pervious:
start = 1
end = pervious+last+1
# 如果当前页大于2 范围
#例如当前页 为 8 时 start=6 end = 10
if num > pervious:
start = num- pervious
end = num+last
#当最后一样超过总页数时
# 例如当前页 为 8 时 start=6 end = 10 但是 只有9页
if end > pagintor.num_pages:
min = end - pagintor.num_pages
end = pagintor.num_pages
start -= min
return (page,range(start,end+1))

页面渲染

def index_view(request,num = ''):
page,page_range=Post.get_posts_by_page(num)
return render(request,'index.html',context={'page':page,'page_range':page_range})

html中页面显示

{% if page.has_previous %}
<a class="extend prev" rel="next" href="/page/{{ page.previous_page_number }}">« Prev</a>
{% endif %}
{% for p in page_range %}
{% if p == page.number %}
<span class="page-number current">{{ p }}</span>
{% else %}
<a class="page-number" href="/page/{{ p }}">{{ p }}</a>
{% endif %}
{% endfor %}
{% if page.has_next %}
<a class="extend next" rel="next" href="/page/{{ page.next_page_number }}">Next »</a>
{% endif %}

Django分页解析的更多相关文章

  1. django分页及搜索后如何翻页

    django自带了Pagnator 导入 from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage 分页 def ...

  2. Django 分页查询并返回jsons数据,中文乱码解决方法

    Django 分页查询并返回jsons数据,中文乱码解决方法 一.引子 Django 分页查询并返回 json ,需要将返回的 queryset 序列化, demo 如下: # coding=UTF- ...

  3. django 分页(2) 使用类 页码显示

    django 分页显示页码 views.py 显示11页码 ) < 起始位置 - 10总页数 else 总页数 > IF 当前页 小于 起始位置 结束页 IF 当前页 大于 IF 如果结束 ...

  4. Django 分页功能

    Django 分页功能比较强大,这边是结合官网的内容写的可以参考 https://docs.djangoproject.com/en/1.9/topics/pagination/ 分页命令行练习案列 ...

  5. 原生的 django 分页

    原始的 django 分页 # 基本 写法 class Paginator(object): def __init__(self, object_list, per_page, orphans=0, ...

  6. Autoit 实现word拆分页解析 (python同理)

    Autoit 实现word拆分页解析 (python同理) 背景 之前一直在做相关工作,由于没有找到解决最佳解决方案,老办法思路是 python先将word 转成pdf,按照页码 提取文字,从而实现w ...

  7. django 分页组件

      一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib i ...

  8. Django分页(二)

    Django分页(二) 要求 .设定每页显示数据条数 # # .用户输入页码(第一页.第二页...) # # .设定显示多少页号 # # .获取当前数据总条数 # # .根据设定显示多少页号和数据总条 ...

  9. Django分页(一)

    Django分页(一) 手动实现简单分页 HTML <!DOCTYPE html> <html lang="en"> <head> <me ...

随机推荐

  1. 魔方方法之--类的构造(__init__,__new__)和析构(__del__)方法

    构造方法(参见小甲鱼入门教程) __ init__()方法:类的初始化方法,初始化类对象时被调用,需要的时候再调用它 注意点:这个方法的返回值必须是None class Rectangle(): de ...

  2. Reviewing notes 2.1 of Mathematical analysis

    Chapter2 Numerical sequence and function Cartesian product set If S and T are sets,then the cartesia ...

  3. 一、pytest的介绍和安装

    需要针对一个项目系统开发一套UI自动化测试脚本,自己结合着学习,采用了pytest去实现,这里留下记录. 什么是pytest pytest 是一个非常成熟的全功能的Python测试框架 可以胜任uni ...

  4. Ubuntu上使用systemd创建服务文件来启动和监视底层网络应用程序实现守护进程

    在Linux上使用Nginx设置ASP.NET Core的托管环境,并部署到它 创建服务文件 创建服务定义文件: sudo vim /etc/systemd/system/kestrel-basic. ...

  5. linux的目录和基本的操作命令

    目录相关操作:( ctrl+l   清空当前的屏幕中的命令  ) 一:目录说明: .   当前目录..   上一层目录-   前一个工作目录~   当前[用户]所在的家目录 蓝色的文件: 都是目录 白 ...

  6. 自动生成缓存Key值的CacheKeyHelper

    /// <summary> /// CacheKeyHelper /// </summary> public class CacheKeyHelper { /// <su ...

  7. 微信小程序 template模板使用

    参考文章: 微信小程序-template模板使用

  8. JS window,onload 与 $().read()

    JS:window.onload的使用介绍 .在body标签里面 .在JS语句调用 .同时调用多个函数 .JS调用多个函数 .自定义的函数多次调用 jquery $(document).ready() ...

  9. docker 启动容器报错

    2018-10-24 报错信息: /usr/bin/docker-current: Error response from daemon: driver failed programming exte ...

  10. URL篇之相对URL

    URL有两种方式:绝对的和相对的. 绝对URL中包含有访问资源所需的全部信息,是访问网络资源必须的. 相对URL是不完整的,要从相对URL中获取访问资源所需的全部信息,就必须相对于另一个被称为其基础( ...