python的Web框架,html分页
使用简单的算法得出页码数,然后在html中获取即可。仅供参考。
views的写法
def crm_stu(request):
section = '教师后台管理页'
search = request.GET.get('search', '').strip() #搜索的值
if search:
# 如果是数字,则返回qq或者phone的查询结果
if search.isdigit():
sts = Students.objects.filter(Q(qq=search) | Q(phone=search), is_deleted=False).order_by('-e_time')
# 如果不是数字,则返回姓名的查询结果。
else:
sts = Students.objects.filter(name__contains=search, is_deleted=False).order_by('-e_time') # 如果搜索的值不存在,则返回没有删除的值。
else:
sts = Students.objects.filter(is_deleted=False).order_by('-e_time') 把需要的数据计算出来,然后传给tags标签
# 当前页
page = request.GET.get('page', 1)
page = int(page)
# 每页显示的数据条数
per_page = request.GET.get('per_page', 10)
per_page = int(per_page)
# 总学生数
total_count = sts.count()
# 总页数
total_page = math.ceil(total_count/per_page) # 获取数据的范围。
sts = sts[(page-1)*per_page:page*per_page] #把需要的参数和值传送给html
return render(request, 'teacher/crm-stu.html', context={
'section': section,
'sts': sts,
'search': search,
'page': page,
'per_page': per_page,
'total_page':total_page,
})
标签tags的方法定义
# 注册并把配置的网页放进来,并把context传给网页
@register.inclusion_tag('inclu_tags/pagination.html',takes_context=True) def pagination(context): # 除当前页外,每两边的页码数
num = 2
page = context['page']
per_page = context['per_page']
total_page = context['total_page'] page_list = []
# 生成左边的页码以及当前页码
if page - num <= 0: #如果当前页面减去num的数量小于等于0,则左边页码是展示不全的,不够num的数量
for i in range(page):
page_list.append(i+1)
else:
for i in range(page-num,page+1):
page_list.append(i) # 生成右边的页码
if page + num >= total_page: #如果当前的页码加上num的数量大于总页数,则右边的页码超出了总页数,就需要页码只到总页数为止
for i in range(page+1, total_page+1):
page_list.append(i)
else:
for i in range(page+1, page+num+1):
page_list.append(i) return {
'page_list': page_list,
'context': context,
}
num代表页面两边的页面数量。每边的页码只有2个,则num就是2。

html中的用法:css样式请忽略
<nav aria-label="Page navigation">
<ul class="pagination" style="margin: 0"> <!--如果当前页码为1,则显示css样式,不能点击-->
<li {% if context.page == 1 %}class="disabled" {% endif %}>
如果当前页码为大于1,则加上href标签,可以有点击上一页的标签,且上一页的标签需要渲染出来。是当前网址+参数(搜索内容,当前页码-1,每页展示的数据条数)
<a {% if context.page > 1 %}href="{{ request.path }}?search={{ context.search }}&page={{ context.page|add:'-1' }}
&per_page={{ context.per_page }}"{% endif %} aria-label="Next">
<span aria-hidden="true">«</span>
</a> </li>
{% for page in page_list %}
<li {% if context.page == page %}class="active" {% endif %}><a href="{{ request.path }}?search={{ context.search }}
&page={{ page }}&per_page={{ context.per_page }}">{{ page }}</a></li>
{% endfor %}
<li {% if context.page == context.total_page %}class="disabled" {% endif %}>
<a {% if context.page < context.total_page %}href="{{ request.path }}?search={{ context.search }}&page=
{{ context.page|add:'1' }}&per_page={{ context.per_page }}"{% endif %} aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
<li><a href="{{ request.path }}?page=1&per_page={{ context.per_page }}">回到首页</a></li>
</ul>
</nav>
Django内置分页功能
# 接受两个参数
from django.core.paginator import Paginator
from teacher.models import Students
>>>p = Paginator(Students.objects.all().ordet_by('-c_time'), 3) # 总数据量
>>> p.count
15 # 总页数
>>> p.nun_pages
5 # 页面范围
>>> p.page_range
range(1,6) # 返回第一页的数据
>>> page1 = p.page(1) # 获取的是一个可迭代的set字段
>>> page1.object_list
<QuerySet [<Students: 哈哈哈-23>, <Students: 哈哈-15>, <Students: aaaasdds-16>]> # 是否有上一页
>>> page1.has_previous()
False # 是否有下一页
>>> page.has_next()
True # 下一页的页码
>>> page1.next_page_number()
2 # 获取当前页的数据
>>> s = p.get_page(1) # 当前页码
>>>page1.nunber
1
python的Web框架,html分页的更多相关文章
- Python Flask Web 框架入门
Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...
- 比我的脸还干的gan货——Python Flask Web 框架入门
Flask是一个轻量级的基于Python的web框架. 本文适合有一定HTML.Python.网络基础的同学阅读. 1. 简介 这份文档中的代码使用 Python 3 运行.是的,所以读者需要自己在电 ...
- Python之Web框架Django
Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址 Python 下载地址:https://www.pyt ...
- Python之Web框架
Python之Web框架: 一. Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...
- python 实现web框架simfish
python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供 ...
- Python之Web框架们
Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...
- python各种web框架对比
0 引言 python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的 ...
- Python3.5学习十八 Python之Web框架 Django
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
- python之web框架(3):WSGI之web应用完善
python之web框架(3):WSGI之web应用完善 1.上篇的web框架太low,只能实现回应固定页面.现在将它进行完善.首先将wsgi和web服务器进行分离,并给予它回复静态页面的能力. we ...
- python之web框架(2):了解WSGI接口
python之web框架(2):了解WSGI接口 1.什么是wsgi接口: wsgi:Web Service Gateway Interface.它不是模块,而只是一种规范,方便web服务器和各种框架 ...
随机推荐
- boost asio 学习(五) 错误处理
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=6 5. Erro ...
- python之内部函数
1.bool,all,any (1)当内容为空时 >>> a=[] >>> bool(a) False >>> all(a) True >& ...
- JavaBean四个作用域范围
使用 useBeans的scope属性可以用来指定javabean的作用范围 page //仅在当前页面有效 request //可以通过HttpRequest.getAttribute()方法取得J ...
- scp复制文件到指定端口
1.scp基本格式 scp file user@host:/dir 2.scp复制文件到指定端口 scp默认连接的端口是22端口,如果ssh不是使用标准的22端口则使用-P(P大写)指定: scp - ...
- springboot读取properties和yml配置文件
一.新建maven工程:springboot-configfile-demo,完整工程如下: pom.xml <?xml version="1.0" encoding=&qu ...
- CSS样式总结(作业六)
1:CSS基本介绍 CSS全称为“层叠样式表 (Cascading Style Sheets)”,它主要是用于定义HTML内容在浏览器内的显示样式,如文字大小.颜色.字体加粗等. css 样式由选择符 ...
- a标签使用href=”javascript:void(0); 在火狐浏览器跟chrome 不兼容
使用如下方式的链接.在Chrome中点击后行为符合预期,但在IE下会新开标签卡(根据参考资料,Firefox中有相同问题).<a href=”javascript:void(0);” targe ...
- 在Azure DevOps Server (TFS 2019) 流水线传递参数
变量概述 在Azure DevOps Server的流水线中,变量是衔接不同任务和不通代理之间的桥梁,它可以使相对松散.各自独立的任务之间相关影响并共享数据.在流水线中使用变量,可以在各任务之间相互调 ...
- cant found Microsoft.VSSDK.BuildTools.15.0.26201
如果在vs扩展开发中出现 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 Failed to load 'C:\程序\EncodingNormalior\packages\Microsoft. ...
- Integer包装类源码分析
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 今天上班的途中在手机里看到几道关于Integer拆装箱的小题目,正好有点时间翻看了一下Integer类的源码,加上自己的一点思考,决定写点 ...