Django分页解析
分页
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分页解析的更多相关文章
- django分页及搜索后如何翻页
django自带了Pagnator 导入 from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage 分页 def ...
- Django 分页查询并返回jsons数据,中文乱码解决方法
Django 分页查询并返回jsons数据,中文乱码解决方法 一.引子 Django 分页查询并返回 json ,需要将返回的 queryset 序列化, demo 如下: # coding=UTF- ...
- django 分页(2) 使用类 页码显示
django 分页显示页码 views.py 显示11页码 ) < 起始位置 - 10总页数 else 总页数 > IF 当前页 小于 起始位置 结束页 IF 当前页 大于 IF 如果结束 ...
- Django 分页功能
Django 分页功能比较强大,这边是结合官网的内容写的可以参考 https://docs.djangoproject.com/en/1.9/topics/pagination/ 分页命令行练习案列 ...
- 原生的 django 分页
原始的 django 分页 # 基本 写法 class Paginator(object): def __init__(self, object_list, per_page, orphans=0, ...
- Autoit 实现word拆分页解析 (python同理)
Autoit 实现word拆分页解析 (python同理) 背景 之前一直在做相关工作,由于没有找到解决最佳解决方案,老办法思路是 python先将word 转成pdf,按照页码 提取文字,从而实现w ...
- django 分页组件
一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib i ...
- Django分页(二)
Django分页(二) 要求 .设定每页显示数据条数 # # .用户输入页码(第一页.第二页...) # # .设定显示多少页号 # # .获取当前数据总条数 # # .根据设定显示多少页号和数据总条 ...
- Django分页(一)
Django分页(一) 手动实现简单分页 HTML <!DOCTYPE html> <html lang="en"> <head> <me ...
随机推荐
- BZOJ2668:[CQOI2012]交换棋子(费用流)
题目描述 有一个n行m列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态.要求第i行第j列的格子只能参与mi,j次交换. 输入输出格式 输入格式: 第一行 ...
- win7下钩子失效解决方案
win7键盘钩子失效解决方法:1.win开始右键+r(运行) 2.将其输入regedit.exe(注册表管理器),回车打开注册表管理器 3.进入HKEY_LOCAL_MACHINE4.进入到SYS ...
- P4855 MloVtry的idea
$ \color{#0066ff}{ 题目描述 }$ MloVtry是一个脑洞很大的人,它总会想出一些奇奇怪怪的idea. 可问题是,MloVtry作为一个蒟蒻,很多时候都没办法解决自己提出的问题,所 ...
- Sublime的一些问题记录
1.默认的中文字体显示异常(参考:关于最新版的Sublime Text 3中默认的中文字体样式显示异常的问题) 1. 选择Perferences(首选项)--> settings(设置) 2. ...
- C语言——从入门到精通,从精通到放弃
从第一次在CB上运行处 Hello World开始,哈哈哈哈,便开始各种幻想,哈哈哈哈,想着这就入门了,哈哈哈哈,我果然是个天才,哈哈哈哈. 后来啊,if-else语句,for 语句,while语句, ...
- Elements in iteration expect to have 'v-bind:key' directives错误的解决办法
一.错误如下 [eslint-plugin-vue][vue/require-v-for-key]Elements in iteration expect to have 'v-bind:key' d ...
- ssh 操作
1.登录 ssh 用户名@远程地址 2.拷贝:scp -r 本地文件夹 远程文件夹(user@ip:目录) 3.从ssh中临时退出: a. ~ (control+z) b.查看后台任务:jobs c ...
- HTTP上下文表单内容转为实体对象
using ServiceStack.Web; using System; using System.Collections.Generic; using System.Linq; using Sys ...
- Feel Good(两遍单调栈维护区间+前缀和)
Bill is developing a new mathematical theory for human emotions. His recent investigations are dedic ...
- Tarjan算法打包总结(求强连通分量、割点和Tarjan-LCA)
目录 Tarjan打包总结(求强连通分量.割点和Tarjan-LCA) 强连通分量&缩点 原理 伪代码 板子(C++) 割点 原理 伪代码 最近公共祖先(LCA) 原理 伪代码 板子 Tarj ...