python django 之 django自定制分页
- 自定制的分页模块
#!/usr/bin/env python3 # V1.1 解决问题:
# 1). p 参数 为 负数 与 p 参数查过总页数时报错的问题 # V1.2 解决的问题:
# 1). 点击分页无法, get 其他参数的问题 class PageInfo(object):
def __init__(self, current_page,per_page_num, all_count, base_url, get_url='' , page_range=9):
"""
:param current_page: 当前页
:param per_page_num: 每页显示的数据的条数
:param all_count: 数据总条数
:param base_url: 请求路径
:param page_range: 显示页数, 标准网页页码数
:param get_url : 用户除 p 参数之外提交的其他 get 参数, 用来拼接 url
"""
try:
current_page = int(current_page)
except Exception as e:
current_page = int(1)
self.current_page = current_page
self.per_page_num = per_page_num
# 数据总条数 / 每页页数 如果 余数为 0 商就就是页数, 如果非零 页数就是 商 + 1
quotient, remainder = divmod(all_count, per_page_num)
if remainder != 0:
self.all_page = quotient + 1 # all_page 总页数
else:
self.all_page = quotient
self.base_url = base_url
self.page_range = page_range
self.get_url = get_url
# 限制当前页的 范围
if current_page < 1:
self.current_page = 1
elif current_page >self.all_page:
self.current_page = self.all_page def start(self):
return (self.current_page - 1) * self.per_page_num def end(self):
return self.current_page * self.per_page_num def page_str(self):
'''在 HTML 页面中显示页码信息'''
page_list = [] # 首页
home_page = '<li><a href="%s?p=1%s">首页</a></li>'%(self.base_url, self.get_url)
page_list.append(home_page)
# 限制 上一页
if self.current_page <=1:
previous = '<li><a href="">上一页</a></li>'
else:
previous = '<li><a href="%s?p=%s%s">上一页</a></li>' %(self.base_url,self.current_page-1, self.get_url)
page_list.append(previous) # 整个 大 if 的作用 : 使用 start 与 end 类限制页码的个数
if self.all_page <= self.page_range:
# 此 if 的 作用 : 当页码总数 <= 最大页码显示的个数, 时触发
start = 1
end = self.all_page
else:
if self.current_page > int(self.page_range/2):
if self.current_page >= self.all_page-int(self.page_range/2):
# 此 if 循环 : 当前页码 >= 最大页码-标准页码/2 时触发, 不然就会出现没有数据的假页码,
# 比如最大页码, 113 此时就会出现 114 , 114 就是假页码
start = self.all_page - self.page_range + 1 # 如果不加 1 页码数, 开始的页码就会是 标准页码多一个
# 这个时候开始生成为就应该是, 最大页码 - 标准页码 + 1 = 这时页面上的页码才是 标准页码个数
end = self.all_page + 1 # 最后一只能是 最大页码
else:
start = self.current_page - int(self.page_range/2)
end = self.current_page + int(self.page_range/2)+1
else:
# 处理 首页的几页页
start = 1 # 说明页码的开头必须是 1
end = self.page_range +1 # # for i in range(1, self.all_page+1):
for i in range(start, end):
# for 的作用: 循环生成页码, 而页码的个数是在 self.page_range 中指定
# start 与 end 是为了限制页码的个数 # if 判断的 用途 , 为了实现, 只有在中间的 页码 才有 class="active" 属性
if self.current_page == i:
temp = '<li class="active"><a href="%s?p=%s%s">%s</a></li>'%(self.base_url, i, self.get_url, i)
else:
temp = '<li><a href="%s?p=%s%s">%s</a></li>' % (self.base_url, i, self.get_url, i)
page_list.append(temp) # 限制 下一页
if self.current_page >= self.all_page:
next_page = '<li><a href="">下一页</a></li>'
else:
next_page = '<li><a href="%s?p=%s%s">下一页</a></li>' %(self.base_url,self.current_page+1, self.get_url)
# 添加进列表
page_list.append(next_page) # 尾页
home_page = '<li><a href="%s?p=%s%s">尾页</a></li>'%(self.base_url, self.all_page, self.get_url)
page_list.append(home_page)
return ''.join(page_list) - 调用的视图函数 (视图文件)
def data_count(request):
all_count = models.District.objects.count()
from .page_info import PageInfo
base_url = request.path_info
page_info = PageInfo(request.GET.get('p'), 10, all_count, base_url)
user_list = models.District.objects.filter(id__range=[page_info.start(),page_info.end()])
return render(request, 'users2.html',{'user_list':user_list}) - template 文件
<body>
<div style="width: 800px; margin: 0 auto">
<h1>用户列表</h1>
<table class="table table-hover table-bordered">
<tr>
<th>ID</th>
<th>用户名</th>
<th>密码</th>
<th>邮箱</th>
</tr>
{% for i in user_list %}
<tr>
<td>{{ i.id }}</td>
<td>{{ i.name }}</td>
<td>{{ i.password }}</td>
<td>{{ i.email }}</td>
</tr>
{% endfor %}
</table>
<div>
<nav aria-label="...">
<ul class="pagination">
{# 分页页码 #}
{{ page_info.page_str|safe }}
</ul>
</nav>
</div>
</div>
</body>
python django 之 django自定制分页的更多相关文章
- Python开发【Django】:分页、Cookie和Session
分页 1.简单分页 涉及xss攻击,需要用到mark_safe方法,使用此方法字符串传输到后端后,已html形式显示,而非字符串 HTML文件: <!DOCTYPE html> <h ...
- python web框架 Django进阶
django 进阶 基础中,一些操作都是手动创建连接的非主流操作,这样显得太low,当然也是为了熟悉这个框架! 实际中,django自带连接数据库和创建app的机制,同时还有更完善的路由系统机制.既然 ...
- python框架之django
python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...
- 第六篇:web之python框架之django
python框架之django python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...
- Django框架下的增强分页组件
本文通过文章同步功能推送至博客园,显示排版可能会有所错误,请见谅! 描述:Django框架内置了分页功能,但其只能满足简单需求,难以实现复杂功能. 实现代码: #!/usr/bin/env pytho ...
- python面试题-django相关
1.中间件 中间件一般做认证或批量请求处理,django中的中间件,其实是一个类,在请求和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法, 如请求过来 执行process_re ...
- 6月15日 python学习总结 Django模板语言相关内容
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
- Python攻关之Django(一)
课程简介: Django流程介绍 Django url Django view Django models Django template Django form Django admin (后台数据 ...
- Python Virtualenv运行Django环境配置
系统: RHEL6.5 版本说明: Python-3.5.0 Django-1.10.4 virtualenv:为每个项目建立不同的/独立的Python环境,你将为每个项目安装所有需要的软件包到它们各 ...
- 【Python实战】Django建站笔记
前一段时间,用Django搭建一个报表分析的网站:借此正好整理一下笔记. 1. 安装 python有包管理工具pip,直接cd Python27/Scripts,输入 pip install djan ...
随机推荐
- MySQL报错解决:The MySQL server is running with the --read-only option so it cannot execute this statement
MySQL报错:The MySQL server is running with the --skip-grant-tables option so it cannot execute this st ...
- mpu6050的驱动的加载和测试步骤
mpu6050的使用方法: 1.接线方式: VCC,GND,SCL,SDA,正常接法,VCC接3.3v,主要说一下AD0引脚,用来表示地址 接低电平设备地址为0x68,接高电平表示0x69 2.设备接 ...
- windows10+apache2.4+python3.6部署Django2.2.4项目
刚从家回来,老师让写专利,就开始准备写,初稿交给老师后,把我说了一顿,我就想着回去改呀,然后...老师找到了我,说是食品院那急需一个展示数据的平台,然我尽快干出来,我也是菜鸟啊,就没单独干过呀,即使是 ...
- $n$阶常微分方程通解中常数独立的意义
丁同仁,李承治编<常微分方程教程>第二版的定义1.3给出了 $ n$ 阶常微分方 程 $ {\displaystyle F(x,y,y',\cdots,y^{(n)})=0 \ \ \ \ ...
- The website is API(3)
网络爬虫实战知识准备: Requests库.robots(网络爬虫排除标准).BeautifulSoup库 一.Re正则表达式 1. 简洁地表达一组字符串 通用的字符串表达框架 字符串匹配 编译: 2 ...
- arm汇编几个经典例题
这几个例题来自我们的上机实验,通过这几个例题基本上能掌握arm汇编一些最基本的操作 arm汇编实现1-100的加法 12345678910111213 AREA Example1,CODE,READO ...
- layui 触发 select 下option 被选择事件
1.找到值为某一个的元素 var S0 = 'dd[lay-value='+ level+']'; 2.给该元素注册点击事件 siblings(兄弟节点) $('select[name=\'leve ...
- 基础篇七:默认配置语法(/etc/nginx/nginx.conf)
首选我们 vim nginx.conf 参照上图,我们看看nginx.conf 的个参数含义 我们再看看 /etc/nginx/conf.d/default.conf
- Windows下 webstorm安装tomcat配置svn并使用
先附上所需要的软件的下载地址:https://pan.baidu.com/s/1c2ripd2 1.下载并安装jdk以及配置jdk的环境变量 1)下载jdk,选择安装目录安装,我选择的是默认路径,安装 ...
- Linux SSH 允许root用户远程登录和无密码登录
1. 允许root用户远程登录 修改ssh服务配置文件 sudo vi /etc/ssh/sshd_config调整PermitRootLogin参数值为yes,如下图: 2. 允许无密码登录同上,修 ...