分页

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. cenos安装memcache

    注意事项: 1 安装时注意权限问题 sudo 2 需先启动memcache服务 php才能测试   Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度 ...

  2. Python3之uuid模块

    一. 简介 UUID是128位的全局唯一标识符,通常由32字节的字母串表示.它可以保证时间和空间的唯一性,也称为GUID. 全称为:UUID--Universally Unique IDentifie ...

  3. springcloud整合bus

    bus的使用主要是配合springcloud config部分来一起使用,并没有单独使用 首先建立服务端: <dependency> <groupId>org.springfr ...

  4. α测试,Beta测试

    α测试(内测)是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试.α测试的目的是评价软件产品的FLURPS(即功能.局域化.可使用性.可靠性.性能和支持).尤其注 ...

  5. Sasha and a Bit of Relax(前缀异或和+二维数组+思维)

    Sasha likes programming. Once, during a very long contest, Sasha decided that he was a bit tired and ...

  6. bzoj4034 树上操作 树链剖分+线段树

    题目传送门 题目大意: 有一棵点数为 N 的树,以点 1 为根,且树点有权.然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有 ...

  7. es6 封装一个基础的表单验证

    1, 需求分析 设计一个通用的表单验证,如果后期表单中添加了更多的需求,不需要更改之前的代码逻辑,最好不要改之前的代码,需要加什么直接加就好了. 2,代码分析 此表单验证最好返回一个函数,在api设计 ...

  8. springboot(一):入门

    什么是springboot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...

  9. [转] 在body中没有元素把高度撑开的情况下,设置全屏

    [From] https://segmentfault.com/q/1010000006182839 html,body { margin:; padding:; min-height: 100vh; ...

  10. PIE SDK傅里叶变换

    1.算法功能简介 傅里叶变换能把遥感图像从空域变换到只包含不同频域信息的频域中.原图像上的灰度突变部位(如物体边缘).图像结构复杂的区域.图像细节及干扰噪声等,经傅里叶变换后,其信息大多集中在高频区: ...