[oldboy-django][2深入django]分页功能
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">«</span></a></li>'
else:
prev_page = '<li><a href="%s?page=%s" aria-label="Previous"><span aria-hidden="true">«</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">»</span></a></li>'
else:
next_page = '<li><a href="%s?page=%s" aria-label="Next"><span aria-hidden="true">»</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]分页功能的更多相关文章
- django高级应用(分页功能)
django高级应用(分页功能) 1.原生分页应用 前端html代码 <!DOCTYPE html> <html lang="en"> <head&g ...
- django内置的分页功能
django内置的分页功能 # 先导入需要查询的模型类 from game.models import Score # 导入内置的分页功能 from django.core.paginator imp ...
- django中如何实现分页功能
1.在html页面中导入js文件和css文件 <link rel="stylesheet" href="../../../static/css/jquery.pag ...
- django rest framework实现分页功能
在web开发中很多需求都需要实现分页功能,然而 Django Rest Framework 自带的分页功能,只能在 mixins.ListModelMixin and generics.Generic ...
- Django【进阶】分页功能Pagination
项目中,我们需要很多非业务逻辑的功能,例如分页功能,而且此类功能移植性很好,可以在不同的项目中使用,所以整理好这些功能会一定程度上提高开发效率,下面是分页功能代码,使用时,可单独放在utils目录 & ...
- Python之django自带的分页功能
前端页面: <div class="col-sm-6"> <div class="dataTables_paginate paging_simple_n ...
- django 和 mongdb 写一个简陋的网址,以及用django内置的分页功能
https://github.com/factsbenchmarks/simple_websit_about_58 一 设置 数据库的设置 在settings文件中加入这样一段代码: from mon ...
- django分页功能实现
django内置的分页功能需要引入内置模块from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger Pagina ...
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
django Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...
- python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法
python_way day18 html-day4 1.Django-路由系统 - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...
随机推荐
- IOS 旋转+缩放(手势识别)
@interface NJViewController ()<UIGestureRecognizerDelegate> @property (weak, nonatomic) IBOutl ...
- IOS view拖拽(触摸事件)
• iOS中的事件可以分为3大类型 触摸事件 加速计事件 远程控制事件 响应者对象 • 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事 件.我们称之为“响应 ...
- Android(java)学习笔记74:ListViewProject案例(ListView + ArrayAdapter)
1. 首先是MainActivity.java文件,如下: package com.himi.lv1; import java.util.ArrayList; import java.util.Lis ...
- 1.VS Code 开发C#入门 安装Dotnet core
1. dot.net 网站 下载 .NET Core 1.0 (https://www.microsoft.com/net/download/core) 2. 打开命名提示符: 3.dotnet ...
- Linux---cp命令学习
cp命令 cp source_file target_file 能够复制文件,如果target_file所指定的文件不存在,cp就创建这个文件,如果已经存在,就把文件内容清空并把source_fil ...
- Bootstrap HTML编码规范
语法 1.用两个空格来代替制表符(Tab)--这是唯一能保证在所有的环境下获得一致展现的方法. 2.嵌套元素应当缩进一次(即两个空格). 3.对于属性的定义,属性值确保全部都用双引(避免使用单引号). ...
- Oracle 事务 锁
一. 事务 是一系列的数据库操作,是数据库应用的基本逻辑单位以及并发控制的基本单位.所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 要将有组语句作为事务考 ...
- 黑马基础阶段测试题:创建一个存储字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大数据与云计算”。遍历集合,将长度小于5的字符串从集合中删除,删除成功后,打印集合中的所有元素
package com.swift; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; ...
- mysql 存储过程 例子
DROP PROCEDURE IF EXISTS variable_demo; delimiter // CREATE PROCEDURE variable_demo() BEGIN select ' ...
- vue-cli的build的文件夹下没有dev-server.js文件,怎么配置mock数据
因为最新版本的vue-cli已经放弃dev-server.js,只需在webpack.dev.conf.js配置就行 新版webpack.dev.conf.js配置如下: 在const portfin ...