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">&laquo;</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">&laquo;</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">&raquo;</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">&raquo;</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

实例化对象

  1. 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})

前端代码

  1. <div>
    {{ page_html|safe }}
    </div>

使用django脚本去创建数据

  1. 批量创建数据

    1. 使用Django脚本去创建数据
    2. bulk_create()
  2. 分页
    1. 纯Python基础写的,
    2. django里面获取当前url
      1. request.path_info 获取当前路径
      2. request.get_full_path 获取全路径

实际样式

django之分页,纯python代码的更多相关文章

  1. pngCanvas 是一个使用纯Python代码的生成png图像的工具

    #!/usr/bin/env python """Simple PNG Canvas for Python - updated for bytearray()" ...

  2. 深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!

    本文参考:http://www.dabeaz.com/coroutines/   作者:David Beazley 缘起: 本人最近在学习python的协程.偶然发现了David Beazley的co ...

  3. 涨见识了,在终端执行 Python 代码的 6 种方式!

    原作:BRETT CANNON 译者:豌豆花下猫@Python猫 英文:https://snarky.ca/the-many-ways-to-pass-code-to-python-from-the- ...

  4. Python Django的分页,Form验证,中间件

    本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...

  5. python代码自动补全配置及Django入门Demo

    django入门代码示例小博客:https://pan.baidu.com/s/1pLjLPSv 1.自动补全功能 许多人都知道 iPython 有很好的自动补全能力,但是就未必知道 python 也 ...

  6. Django 实现分页功能(django 2.2.7 python 3.7.5 )

    Django 自带名为 Paginator 的分页工具, 方便我们实现分页功能.本文就讲解如何使用 Paginator 实现分页功能. 一. Paginator Paginator 类的作用是将我们需 ...

  7. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  8. Python代码样例列表

    扫描左上角二维码,关注公众账号 数字货币量化投资,回复“1279”,获取以下600个Python经典例子源码 ├─algorithm│       Python用户推荐系统曼哈顿算法实现.py│    ...

  9. Python代码混淆和加密技术

    Python进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向. 混淆和加密就有所必要了. 为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. http: ...

随机推荐

  1. Process Doppelg&#228;nging

    进程注入:Process Doppelgänging   攻击者可以通过Process Doppelgänging将恶意代码注入到进程中,从而逃避基于进程的防护,并且进行可能的特权提升.Process ...

  2. suse 12 双网卡bonding模式

    文章目录 工欲善其事,必先配静态ip 网卡bonding eth0 eth1 192.168.70.52 192.168.70.55 工欲善其事,必先配静态ip 重要的事情说三遍 修改配置之前,先备份 ...

  3. 微服务从代码到k8s部署应有尽有系列(四、用户中心)

    我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...

  4. Spring Data JPA应用之常规CRUD操作初体验

    基于对于一个陌生的技术框架,先使用后研究其实现的原则(大部分本人如此,就如小朋友学习骑自行车不会先研究自行车是怎么动起来的而是先骑会了),对于Spring JPA先通过案例实践其怎么用吧. 用之前得明 ...

  5. 为什么使用Mybatis对JDBC进行包装探究

    一.原生JDBC在实际生产中使用存在的影响性能的问题 首先分析使用JDBC的代码: Connection connection = null; PreparedStatement preparedSt ...

  6. blender导入灰度图生成地形模型

    安装软件 在此处下载blender并安装. 添加平面 1.打开blender,右键删除初始的立方体. 2.shift+a选择平面添加进场景: 3.按下s键鼠标拖动调节平面大小确定后按下鼠标左键: 4. ...

  7. java 获取真实IP

    1.java代码 /** 获取客户端IP */ public static final String getClientIp(HttpServletRequest request) { String ...

  8. Redis原理再学习04:数据结构-哈希表hash表(dict字典)

    哈希函数简介 哈希函数(hash function),又叫散列函数,哈希算法.散列函数把数据"压缩"成摘要,有的也叫"指纹",它使数据量变小且数据格式大小也固定 ...

  9. 录毛线脚本,直接手写接口最简洁的LoadRunner性能测试脚本(含jmeter脚本)

    近日翻看了下招聘信息,很多都要求loadrunner和jmeter这两款工具,毕竟是性能测试的主流客户端并发工具. 录制的问题 做性能脚本是性能测试的基本功,loadrunner和jmeter这两款工 ...

  10. web安全之备份

    1:打开界面,一头雾水.根据题目提示"备份是个好习惯"可以想到,这应该是一个代码泄露问题.常见的网页主页index.php.那么备份文件一般是.bak文件类型.尝试下载该文件 in ...