Djang内置分页和自定义分页
内置分页
views

from django.core.paginator import Paginator,Page,PageNotAnInteger def DJs_pages(request):
nid=request.GET.get('nid')
user_list=models.UserInfo.objects.all()
paginator=Paginator(user_list,2)
# .per_page: 每页显示条目数量
# .count: 数据总个数
# .num_pages:总页数
# .page_range:总页数的索引范围,如: (1,10),(1,200) 一次性显现有多少页显示多少个页码
# .page: page对象
if nid:
a=paginator.page(nid) #显示第x页 a相当于一个列表里面是一页的内容
else:
a=paginator.page(1) # has_next 是否有下一页
# next_page_number 下一页页码
# has_previous 是否有上一页
# previous_page_number 上一页页码
# object_list 分页之后的数据列表
# number 当前页
# paginator paginator对象
return render(request,'pages.html',{'a':a})
template

1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6 </head>
7 <body>
8 <h1>用户列表</h1>
9 <ul>
10 {%for row in a %}
11 <li>{{row.nid}}==={{row.user}}==={{row.age}}===={{row.ug.title}}</li>
12 {%endfor%}
13
14 </ul>
15 <div>
16 {%if a.has_next %}
17 <a href="/pages/?nid={{a.next_page_number}}">下一页</a>
18 {%endif%}
19
20 </div>
21 <div>
22 {%for row in a.paginator.page_range %}
23 <a href="/pages/?nid={{row}}">{{row}}</a>
24 {%endfor%}
25
26 </div>
27 </body>
28 </html>
自定义分页
views
1 from creat_tool.paging import PageInfo
2
3 def custom_page(request):
4
5 all_num=models.UserInfo.objects.all().count()
6 #page_num=math.ceil(all_num/3)
7 pageinfo=PageInfo(request.GET.get('page'),1,all_num,2,'/custom/') #(current_page,每页几个数据,一共多少数据,显示几个页码,url)
8 #current_page=request.GET.get('page')
9 #每页显示多少数据
10 #current_page=int(current_page)
11 #per_page=3
12 #0-3 3-6 6-9
13 user_list = models.UserInfo.objects.all()[pageinfo.start():pageinfo.end()]#[起始位置:结束位置]
14 return render(request, 'custom.html', {'user_list': user_list,'pageinfo':pageinfo})
class

import math
class PageInfo():
def __init__(self,curret_page,per_page_ha_num,all_num,show_page,base_url):
try:
self.curret_page=int(curret_page) #1.将str数字转换为数字 2.不是数字的报错执行except
except Exception as e:
self.curret_page=1
self.per_page_ha_num=per_page_ha_num
self.all_num=all_num
self.all_page_num=math.ceil(self.all_num / self.per_page_ha_num)
self.show_page=int(show_page/2)
self.base_url=base_url
def start(self):
return (self.curret_page-1)*self.per_page_ha_num
def end(self):
return self.curret_page*self.per_page_ha_num def pagers(self):
star = self.curret_page - self.show_page end = self.curret_page + self.show_page if star <= 0:
star = 1
if end > self.all_page_num:
end = self.all_page_num page_list = []
if self.curret_page <= 1:
# prev = '<a href="">上一页</a>'
prev = '<li><a href="#" aria-label="Previous"><span aria-hidden="true">«</span>上一页</a></li>' else:
# prev = '<a href="%s?page=%s">上一页</a>' %(self.base_url,self.curret_page-1)
prev = '<li><a href="%s?page=%s" aria-label="Previous"><span aria-hidden="true">«</span>上一页</a></li>' % (
self.base_url, self.curret_page - 1) page_list.append(prev) # for i in range(1,self.all_page_num+1):
for i in range(star, end + 1):
if i == self.curret_page:
# temp='<a style="background-color:pink" href="%s?page=%s">%s</a>' %(self.base_url,i,i)
temp = ' <li class="active" ><a href="%s?page=%s">%s</a></li>' % (
self.base_url, i, i) # <li class="active" > 强调当前页
else:
temp = ' <li><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i)
# temp = '<a href="%s?page=%s">%s</a>' % (self.base_url,i, i)
page_list.append(temp) if self.curret_page >= self.all_page_num:
# prev = '<a href=""> 下一页</a>'
prev = '<li><a href="#" aria-label="Next"><span aria-hidden="true">«</span></a></li>'
prev = ' <li><a href="#" aria-label="Next"><span aria-hidden="true">»</span>下一页</a></li>'
else:
# prev = '<a href="%s?page=%s">下一页</a>' % (self.base_url,self.curret_page + 1)
prev = '<li><a href="%s?page=%s" aria-label="Next"><span aria-hidden="true">»</span>下一页</a></li>' % (
self.base_url, self.curret_page + 1)
page_list.append(prev)
return ''.join(page_list)
template

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.css"> </head>
<body> <h1>用户列表</h1>
<ul>
{%for row in user_list %}
<li>{{row.nid}}==={{row.user}}==={{row.age}}===={{row.ug.title}}</li>
{%endfor%} </ul>
<!-- {{pageinfo.pagers|safe}}-->
<!-- 传类的对象过来,调用的方法就自动显示--> <nav aria-label="Page navigation">
<ul class="pagination"> {{pageinfo.pagers|safe}} </ul>
</nav> </body>
</html>
Djang内置分页和自定义分页的更多相关文章
- python/Djangof分页与自定义分页
python/Djangof分页与自定义分页 Django分页 ##============================================分页==================== ...
- Linux常用基本命令:三剑客命令之-awk内置变量与自定义变量
AWK中,变量分为两种:内置变量与自定义变量. 常见的内置变量有: FS:输入字段分隔符, 默认为空白字符 OFS:输出字段分隔符, 默认为空白字符 RS:输入记录分隔符(输入换行符), 指定输入时的 ...
- Angular中的内置指令和自定义指令
NG中的指令,到底是什么(what)? 为什么会有(why)?以及怎样使用(how)? What: 在NG中,指令扩展HTML功能,为 DOM 元素调用方法.定义行为绑定数据等. Why: 最大程度减 ...
- VUE:内置指令与自定义指令
VUE:内置指令与自定义指令 常用的内置指令 1)v:text 更新元素的 textContent 2)v-html 更新元素的 innerHTML 3)v-if 如果为true,当前标签才会输出到页 ...
- Java注解-元数据、注解分类、内置注解和自定义注解|乐字节
大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点: 元数据 注解的分类 内置注解 自定义注解 注解处理器 Ser ...
- form-create教程:给内置组件和自定义组件添加事件
本文将介绍form-create如何给内置组件和自定义组件添加事件 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue ...
- 9.1hadoop 内置计数器、自定义枚举计数器、Streaming计数器
1.1 计数器 计数器的作用是用来统计数量的,用于记录特定事件的次数,分为内置计数器.自定义java枚举计数器.自定义Stream计数器三大类.用于质量分析,或应用级统计.分析计数器的值比分析一堆日 ...
- MVC下分页的自定义分页一种实现
1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...
- 5.Smart使用内置函数或者自定义函数
1.使用内置函数 例如使用date函数 {"Y-m-d"|date:$time}格式{第一个参数|方法:第二个参数:第三个参数}即可转换成 2016-07-19 2.使用resi ...
随机推荐
- Java并发机制(7)--线程池ThreadPoolExecutor的使用
Java并发编程:线程池的使用整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3932921.html 1.什么是线程池,为什么要使用线程池: 1.1. ...
- CHAR 和 VARCHAR 的区别?
1.CHAR 和 VARCHAR 类型在存储和检索方面有所不同 2.CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255 当 CHAR 值被存储时,它们被用空格填充到特定长度,检索 ...
- Java 中你怎样唤醒一个阻塞的线程?
在 Java 发展史上曾经使用 suspend().resume()方法对于线程进行阻塞唤醒,但 随之出现很多问题,比较典型的还是死锁问题. 解决方案可以使用以对象为目标的阻塞,即利用 Object ...
- 面试问题之C++语言:如何避免内存泄漏?
转载于:https://www.php.cn/csharp-article-416104.html 1.不要手动管理内存,可以尝试在适用的情况下使用智能指针. 2.使用string而不是char*.s ...
- IOC 初始化源代码阅读之我见
由于本人的能力有限,只能说出自己的见解,如有错漏什么的,请大家批评指出.由于代码封装太多,这里只列出了我认为的部分最重要的代码,一些简单的封装代码,不在下面列出.由于代码太过于复杂,在本次博客中,只列 ...
- 学习Kvm(五)
KVM(一)搭建部署与概述 一,KVM概述 1.1 虚拟化概述 在计算机技术中,虚拟化意味着创建设备或资源的虚拟版本,如服务器,存储设备,网络或者操作系统等等 [x] 虚拟化技术分类: 系统虚拟化(我 ...
- CSDN博客步骤:
在SCDN看到喜欢的文章想转载又嫌一个一个敲太麻烦,干脆直接收藏.但有时候作者把原文章删除或设置为私密文章后又看不了.所以还是转载来的好.这篇博文为快速转载博客的方法,亲测有效,教程如下. 原博客原址 ...
- linux vim编辑器使用
小i 在光标所在行位置停止不动开始写入内容 大I 在光标所在行行首开始写入内容 小a 在光标所在行当前字符后开始写入内容 大A 在光标所在行行尾开始写入内容 小o 在光标所在行下一行开始写入内容 大O ...
- vscode代码格式化快捷键及保存时自动格式化
一.实现vs code中代码格式化快捷键:[Shift]+[Alt]+ F 二.实现保存时自动代码格式化: 1)文件 ------.>[首选项]---------->[设置]: 2)搜索 ...
- 什么是3D建模?
一.3D建模是什么 将所见所想用立体三维的方式通过计算机技术表现出来,这就是3D建模,比如你看到了一个可爱呆萌的卡通人物又或是华丽酷炫的变形金刚,总之就是你认为美好的立体实物 你想将它用计算机技术完美 ...