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服务器和各种框架 ...
随机推荐
- Python之路(第三十篇) 网络编程:socket、tcp/ip协议
一.客户端/服务器架构 1.硬件C/S架构(打印机) 打印机作为一个服务端,电脑连接打印机进行打印 2.软件C/S架构 互联网中处处是C/S架构 如谷歌网站是服务端,你的浏览器是客户端(B/S架构也是 ...
- SpringBoot编写自定义Starter
根据SpringBoot的Starter编写规则,需要编写xxxStarter依赖xxxAutoConfigurer,xxxStarter是一个空的jar,仅提供辅助性的依赖管理,引入其他类库 1.建 ...
- 【轻松前端之旅】<a>元素妙用
浏览器读取服务器内容时,通过URL(包含:协议+域名+绝对路径)如:https://www.baidu.com/index.html浏览器从本地读取内容时,会用file协议.如:file:///E:/ ...
- MFC的停靠窗口中插入对话框,在对话框中添加控件并做控件自适应
单文档程序添加了停靠窗口后,可能会在停靠窗口中添加一些控件.在这里我的做法是在对话框上添加控件并布局,然后将这个对话框插入到停靠窗口中. 步骤 1.插入对话框,在对话框中放入控件(我的为树形控件),并 ...
- python基本数据类型之集合
python基本数据类型之集合 集合是一种容器,用来存放不同元素. 集合有3大特点: 集合的元素必须是不可变类型(字符串.数字.元组): 集合中的元素不能重复: 集合是无序的. 在集合中直接存入lis ...
- 中国剩余定理poj1006
中国剩余定理即解一组带余除法的不定方程组(同余式组解法). 例如:求一个最小数x,已知x%3=2且x%5=3且x%7=2. 思路就是: 1.先从(3,5)的公倍数中找一个%7=1的最小公倍数,这里是1 ...
- Vuejs——(8)Vuejs组件的定义
版权声明:出处http://blog.csdn.net/qq20004604 目录(?)[+] 本篇资料来于官方文档: http://cn.vuejs.org/guide/components ...
- iOS 10 应用内跳转到系统设置
在iOS开发中,有时会有跳转系统设置界面的需求,例如提示用户打开蓝牙或者WIFI,提醒用户打开推送或者位置权限等.在iOS6之后,第三方应用需要跳转系统设置界面,需要在URL type中添加一个pre ...
- consul服务注册与发现
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- vscode调试angular
之前在Asp.net MVC + Angular1 的项目中,要调试前台代码都是用浏览器的开发者工具,使用正常,也没有感觉太大的不方便. 后来接触Angular2项目,因为它是要经过编译的,所以在浏览 ...