django之分页,纯python代码
Django中分页
py文件代码
"""
自定义分页组件
可以返回分页的数据和分页的HTML代码
"""
from django.http import QueryDict
class Pagination(object):
def __init__(self, current_page, total_count, url_prefix, query_dict=QueryDict(mutable=True), per_page=10,
show_page=9):
"""
初始化分分页器
:param url_prefix: a标签的URL前缀
:param current_page: 当前页码数
:param total_count: 数据总数
:param query_dict: 空的QueryDict()对象,并且是可修改的
:param per_page: 每一页显示多少数据, 默认值是10
:param show_page: 页面显示的页码数, 默认值是9
"""
# 0.分页的URL前缀
self.url_prefix = url_prefix
self.query_dict = query_dict
# 1. 每一页显示10条数据
self.per_page = per_page
assert per_page > 0
# 2. 计算需要多少页
total_page, more = divmod(total_count, per_page)
if more:
total_page += 1
self.total_page = total_page
# 3. 当前页码
try:
current_page = int(current_page)
except Exception as e:
current_page = 1
current_page = total_page if current_page > total_page else current_page
# 页码必须是大于0的数
if current_page < 1:
current_page = 1
self.current_page = current_page
# 4. 页面最多显示的页码数
self.show_page = show_page
# 5. 最多显示页码的一半
self.half_show_page = self.show_page // 2
@property
def start(self):
# 数据切片的开始位置
return self.per_page * (self.current_page - 1)
@property
def end(self):
# 数据切片的结束为止
return self.current_page * self.per_page
# 定义一个返回HTML代码的方法
def page_html(self):
# 如果总页码数小于最大要显示的页码数
if self.total_page < self.show_page:
show_page_start = 1
show_page_end = self.total_page
# 左边越界
elif self.current_page - self.half_show_page < 1:
show_page_start = 1
show_page_end = self.show_page
# 右边越界
elif self.current_page + self.half_show_page > self.total_page:
show_page_end = self.total_page
show_page_start = self.total_page - self.show_page + 1
else:
show_page_start = self.current_page - self.half_show_page
# 页面显示页码的结束
show_page_end = self.current_page + self.half_show_page
# 生成分页的HTML代码
page_list = []
# 添加分页代码的前缀
page_list.append('<nav aria-label="Page navigation"><ul class="pagination">')
# 添加首页
self.query_dict['page'] = 1
page_list.append(f'<li><a href="{self.url_prefix}?{self.query_dict.urlencode()}">首页</a></li>')
# 添加上一页
if self.current_page - 1 < 1: # 已经到头啦,不让点上一页啦
page_list.append(
'<li class="disabled"><a href="" aria-label="Previous"><span aria-hidden="true">«</span></a></li>')
else:
self.query_dict['page'] = self.current_page - 1
page_list.append(
f'<li><a href="{self.url_prefix}?{self.query_dict.urlencode()}" aria-label="Previous">'
f'<span aria-hidden="true">«</span></a></li>'
)
for i in range(show_page_start, show_page_end + 1):
self.query_dict['page'] = i
if i == self.current_page:
s = f'<li class="active"><a href="{self.url_prefix}?{self.query_dict.urlencode()}">{i}</a></li>'
else:
s = f'<li><a href="{self.url_prefix}?{self.query_dict.urlencode()}">{i}</a></li>'
page_list.append(s)
# 添加下一页
if self.current_page + 1 > self.total_page:
page_list.append(
'<li class="disabled"><a href="" aria-label="Next"><span aria-hidden="true">»</span></a></li>')
else:
self.query_dict['page'] = self.current_page + 1
page_list.append(
f'<li><a href="{self.url_prefix}?{self.query_dict.urlencode()}" aria-label="Next">'
f'<span aria-hidden="true">»</span></a></li>'
)
# 添加尾页
self.query_dict['page'] = self.total_page
page_list.append(f'<li><a href="{self.url_prefix}?{self.query_dict.urlencode()}">尾页</a></li>')
# 添加分页代码的后缀
page_list.append('</ul></nav>')
page_html = ''.join(page_list)
return page_html
实例化对象
def dashboard(request):
# 获取当前网页路径
url_prefix = request.path_info
# 获取当前页码数
current_page = request.GET.get('page', 1)
# 获取所有客户的信息
customer_list = Customer.objects.all()
# 实例分页代码
pagination = Pagination(current_page=current_page, total_count=customer_list.count(), url_prefix=url_prefix, per_page=8)
# 获取当前页的数据
data = customer_list[pagination.start:pagination.end]
page_html = pagination.page_html()
return render(request, "Dashboard.html", {'customer_list': data, "page_html": page_html})
前端代码
<div>
{{ page_html|safe }}
</div>
使用django脚本去创建数据
- 批量创建数据
- 使用Django脚本去创建数据
- bulk_create()

- 分页
- 纯Python基础写的,
- django里面获取当前url
- request.path_info 获取当前路径
- request.get_full_path 获取全路径
实际样式
django之分页,纯python代码的更多相关文章
- pngCanvas 是一个使用纯Python代码的生成png图像的工具
#!/usr/bin/env python """Simple PNG Canvas for Python - updated for bytearray()" ...
- 深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!
本文参考:http://www.dabeaz.com/coroutines/ 作者:David Beazley 缘起: 本人最近在学习python的协程.偶然发现了David Beazley的co ...
- 涨见识了,在终端执行 Python 代码的 6 种方式!
原作:BRETT CANNON 译者:豌豆花下猫@Python猫 英文:https://snarky.ca/the-many-ways-to-pass-code-to-python-from-the- ...
- Python Django的分页,Form验证,中间件
本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...
- python代码自动补全配置及Django入门Demo
django入门代码示例小博客:https://pan.baidu.com/s/1pLjLPSv 1.自动补全功能 许多人都知道 iPython 有很好的自动补全能力,但是就未必知道 python 也 ...
- Django 实现分页功能(django 2.2.7 python 3.7.5 )
Django 自带名为 Paginator 的分页工具, 方便我们实现分页功能.本文就讲解如何使用 Paginator 实现分页功能. 一. Paginator Paginator 类的作用是将我们需 ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- Python代码样例列表
扫描左上角二维码,关注公众账号 数字货币量化投资,回复“1279”,获取以下600个Python经典例子源码 ├─algorithm│ Python用户推荐系统曼哈顿算法实现.py│ ...
- Python代码混淆和加密技术
Python进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向. 混淆和加密就有所必要了. 为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. http: ...
随机推荐
- Java一维与二维数组的拷贝与排序
Java一维与二维数组的拷贝与排序 目录 Java一维与二维数组的拷贝与排序 Arrays.sort() 一维数组升序排序 二维数组按行升序排序 二维数组按列升序排序 Java中的数组 Java中数组 ...
- 3.6 万颗星!开源 Web 服务器后起之秀,自带免费 HTTPS 开箱即用
众所周知,Web 服务器是 Web 开发中不可或缺的基础服务,在开发中经常会用到.耳熟能详的开源 Web 服务器有久负盛名的 Apache.性能强劲的 Nginx.而我们今天要介绍的开源项目是采用 G ...
- Solution -「洛谷 P5827」点双连通图计数
\(\mathcal{Description}\) link. 求有 \(n\) 个结点的点双连通图的个数,对 \(998244353\) 取模. \(n\le10^5\). \(\mat ...
- C#随机打乱列表List元素顺序
C#随机打乱列表List项目顺序 以下泛型扩展方法,实现了随机打乱泛型列表List<T>的功能 public static List<t> DisorderItems<t ...
- php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
PHP从主流来看,是一门面向过程的语言,它的最大缺点就是无法实现多线程管理,其程序的执行都是从头到尾,按照逻辑一路执行下来,不可能出现分支,这一点是限制php在主流程序语言中往更高级的语言发展的原因之 ...
- 反射、反射机制、类加载、Class类专题复习
一.反射概念 1.反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息(比如成员变量,构造器,成员方法等等),并能操作对象的属性及方法.反射在设计模式和框架底层都会用到. 2. ...
- spring的事务是如何回滚的、事务传播?
实际上也是问的这个问题 spring的事务管理是如何实现的?总: spring的事务是由aop来实现的,首先要生成具体的代理对象,然后按照aop的整套流程来执行具体的操作逻辑,正常情况下要通过通知来 ...
- 小牟有趣的PWN
咳咳,主要是记一下最近学二进制然后工作室里面一个一起学pwn,然后遇到的一个比较好玩的题目. 一共呢,是两个文件,这也是最近学习pwn第一次做到两个文件的题目, 如果想要源文件,这边可以加我们的工作室 ...
- 大家好 这里是yi术家
好久没有来打卡了的说,可能你以为我忽然一时的热度刷题,但是事情并不是这样. 我在之前的章节里写到,我觉得每天的打卡有点浪费资源和时间,所以决定一周打一次卡. 可是上周好像也忘了打卡的样子. 这样任性的 ...
- 网络测试技术——802.1X TLS认证(上篇)
一.TLS认证简介 1.TLS认证 (1)认证过程 · 最安全认证技术 · 实施最复杂 (2)TLS双向证书认证 · 服务器对客户端进行认证 · 客户端对服务器进行认证 2.TLS认证过程 3.交换机 ...
