1 django自带分页

  1.1 分页模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
</head>
<body>
<p>用户信息</p>
<table class="table">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>age</th>
<th>type</th>
</tr>
</thead>
<tbody>
{% for row in current_page_obj %}
<tr>
<td>{{ row.id }}</td>
<td>{{ row.name }}</td>
<td>{{ row.age }}</td>
<td>{{ row.ut.title }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div> {% if current_page_obj.has_previous %}
<a href="/fenye/?page={{ current_page_obj.previous_page_number }}">上一页</a>
{% endif %}
{% for page in current_page_obj.paginator.page_range %}
<a href="/fenye/?page={{ page }}">{{ page }}</a>
{% endfor %} {% if current_page_obj.has_next %}
<a href="/fenye/?page={{ current_page_obj.next_page_number }}">下一页</a>
{% endif %} </div>
</body>
</html>

  1.2 分页视图函数

def fenye(request):

    user_list = models.UserInfo.objects.all()
# 实现分页功能
from django.core.paginator import Page,Paginator current_page_number = request.GET.get('page')
paginator = Paginator(user_list, )
# print(paginator.count) #数据总行数
# print(paginator.num_pages) #总页数
# print(paginator.object_list) #当前页的数据 QuerySet[obj,obj]
# print(paginator.per_page) #每一页显示多少行数据10
# print(paginator.page_range) #页数的范围(,), 是一个range(,),即是一个数组
# print(paginator.page()) #里面的1表示页码数,
try:
current_page_obj = paginator.page(current_page_number) # 也是一个QuerySet对象 [obj,obj,..]
except Exception as e:
current_page_obj = paginator.page() # print(current_page_obj.has_next()) #当前页是否有下一页
# print(current_page_obj.next_page_number()) #当前页的下一页码
# print(current_page_obj.has_previous()) # 当前页是否有上一页
# print(current_page_obj.previous_page_number())# 当前页的上一页码
# print(current_page_obj.object_list) # 当前页的数据行列表QuerySet[obj,obj,...]
# print(current_page_obj.number) # 当前页码
# print(current_page_obj.paginator) # 当前页的paginator对象 return render(request, 'fenye.html', {'current_page_obj': current_page_obj})

 

2 自定义分页

  2.1 模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
</head>
<body>
<p>用户信息</p>
<table class="table">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>age</th>
<th>type</th>
</tr>
</thead>
<tbody>
{% for row in user_list %}
<tr>
<td>{{ row.id }}</td>
<td>{{ row.name }}</td>
<td>{{ row.age }}</td>
<td>{{ row.ut.title }}</td>
</tr>
{% endfor %}
</tbody>
</table> {# {{ page_info.pager|safe }}#}
{#利用了bootstrap的分页组件#} <nav aria-label="Page navigation">
<ul class="pagination">
{{ page_info.pager|safe }}
</ul>
</nav> </body>
</html>

  2.2 自定义模块

class PageInfo(object):
def __init__(self, current_page_num, all_count, base_url, per_page=10, show_page=11):
try:
self.current_page_num = int(current_page_num)
except Exception as e:
self.current_page_num = 1
self.per_page = per_page
a,b = divmod(all_count, per_page)
if b:
a = a + 11 self.all_page = a
self.show_page = show_page
self.base_url = base_url def start(self):
return (self.current_page_num - 1) * self.per_page def end(self):
return self.current_page_num * self.per_page def pager(self): page_list = []
# 如果总的页码数小于11
if self.show_page >= self.all_page:
begin = 1
stop = self.all_page
# 总页码数大于11
else:
half,_ = divmod(self.show_page,2)
if self.current_page_num <= half:
begin = 1
stop = self.show_page
else:
temp = self.all_page - half
if self.current_page_num >= temp:
begin = self.all_page - self.show_page + 1
stop = self.all_page
else:
begin = self.current_page_num - half
stop = self.current_page_num + half prev_page = ''
if self.current_page_num == 1:
prev_page = '<li class="disabled"><a aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>'
else:
prev_page = '<li><a href="%s?page=%s" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>'% (self.base_url, self.current_page_num -1)
page_list.append(prev_page)
for i in range(begin, stop + 1):
if i == self.current_page_num:
temp = '<li class="active"><a href="%s?page=%s">%s</a></li>' % (self.base_url, i,i)
else:
temp = '<li><a href="%s?page=%s">%s</a></li>' % (self.base_url,i,i)
page_list.append(temp) next_page= ''
if self.current_page_num == self.all_page:
next_page = '<li class="disabled"><a aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'
else:
next_page = '<li><a href="%s?page=%s" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>' % (self.base_url,self.current_page_num +1)
page_list.append(next_page)
return ''.join(page_list)

  2.3 视图

def custom_fenye(request):
from utils.pagation_define import PageInfo
current_page_number = request.GET.get('page')
all_count = models.UserInfo.objects.all().count()
page_info = PageInfo(current_page_number, all_count, "/custom_fenye.html/")
user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()] # 列表切片操作 a[start:end] start<= index < end
return render(request, 'custom_fenye.html', {'user_list': user_list, 'page_info': page_info})

[oldboy-django][2深入django]分页功能的更多相关文章

  1. django高级应用(分页功能)

    django高级应用(分页功能) 1.原生分页应用 前端html代码 <!DOCTYPE html> <html lang="en"> <head&g ...

  2. django内置的分页功能

    django内置的分页功能 # 先导入需要查询的模型类 from game.models import Score # 导入内置的分页功能 from django.core.paginator imp ...

  3. django中如何实现分页功能

    1.在html页面中导入js文件和css文件 <link rel="stylesheet" href="../../../static/css/jquery.pag ...

  4. django rest framework实现分页功能

    在web开发中很多需求都需要实现分页功能,然而 Django Rest Framework 自带的分页功能,只能在 mixins.ListModelMixin and generics.Generic ...

  5. Django【进阶】分页功能Pagination

    项目中,我们需要很多非业务逻辑的功能,例如分页功能,而且此类功能移植性很好,可以在不同的项目中使用,所以整理好这些功能会一定程度上提高开发效率,下面是分页功能代码,使用时,可单独放在utils目录 & ...

  6. Python之django自带的分页功能

    前端页面: <div class="col-sm-6"> <div class="dataTables_paginate paging_simple_n ...

  7. django 和 mongdb 写一个简陋的网址,以及用django内置的分页功能

    https://github.com/factsbenchmarks/simple_websit_about_58 一 设置 数据库的设置 在settings文件中加入这样一段代码: from mon ...

  8. django分页功能实现

    django内置的分页功能需要引入内置模块from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger Pagina ...

  9. python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制

    django  Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...

  10. python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法

    python_way day18 html-day4 1.Django-路由系统   - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...

随机推荐

  1. LeetCode Word Ladder 找单词变换梯

    题意:给出两个单词,以及一个set集合,当中是很多的单词.unordered_set是无序的集合,也就是说找的序列也是无序的了,是C++11的标准,可能得升级你的编译器版本了.要求找出一个从start ...

  2. 利用jsplumb和碰撞检测自动生成流程图

    使用jsplumb构建流程图模型时,有一个需求要求,选项可以从选项表中拖拽到指定容器,并且两个选项要接触到的时候才能连接起来,不接触不能连接.效果图如下 略丑- 因为这里用到了拖拽,拖放功能,所以用到 ...

  3. CAsyncSocket create创建套接字失败

    解决方法: 在继承CAsyncSocket 类的子类的构造函数中加入以下代码: if (!AfxSocketInit()) AfxMessageBox(IDP_SOCKETS_INIT_FAILED) ...

  4. 比特币中P2SH(pay-to-script-hash)多重签名的锁定脚本和解锁脚本

    P2SH(pay-to-script-hash)多重签名的脚本 P2SH是多重签名的一种应用形式.在P2SH的交易中,多了一个Redeem Script的概念,称为赎回脚本.当向P2SH脚本的地址转账 ...

  5. POJ 2385 Apple Catching(01背包)

    01背包的基础上增加一个维度表示当前在的树的哪一边. #include<cstdio> #include<iostream> #include<string> #i ...

  6. Linux下bash的快捷键

    Ctrl + A  :切换到命令行开始 Ctrl + E :切换到命令行末尾 Ctrl + L : 清屏,相当于clear Ctrl + U :清除剪切光标前的内容 Ctrl + K :剪切清除光标后 ...

  7. 洛谷P1220 关路灯【区间dp】

    题目:https://www.luogu.org/problemnew/show/P1220 题意:给定n盏灯的位置和功率,初始时站在第c盏处. 关灯不需要时间,走的速度是1单位/秒.问把所有的灯关掉 ...

  8. spring mvc + swagger 配置

    首先,添加mvc框架(略)以及Swagger Maven依赖: <dependency> <groupId>io.springfox</groupId> <a ...

  9. 详解JVM工作原理和特点

    在我们运行和调试Java程序的时候,经常会提到一个JVM的概念.本文将为大家讲解JVM工作原理和特点,希望对大家有所帮助. AD:网+线下沙龙 | 移动APP模式创新:给你一个做APP的理由>& ...

  10. 回数是指从左向右读和从右向左读都是一样的数,例如 12321 , 909 。请利用 filter() 滤掉非回数

    不管在什么地方,什么时候,学习是快速提升自己的能力的一种体现!!!!!!!!!!! 最近一段时间学习了廖雪峰老师学的Python学习资料,给自己的帮助很大,同时也学到的了很多,今天做了一道练习题,对于 ...