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服务器和各种框架 ...
随机推荐
- centos7 mysql的安装与配置
用yum直接安装,不用更改配置 1. #yum install mysql #yum install mysql-server #yum install mysql-devel yum运行报错的化有可 ...
- trinitycore 魔兽服务器源码分析(二) 网络
书接上文 继续分析Socket.h SocketMgr.h template<class T>class Socket : public std::enable_shared_from_t ...
- C# 多线程编程,传参,接受返回值
C# 多线程编程,传参,接受返回值 今天将多线程的知识有回顾了下,总结了几点: 新建一个线程(无参数,无返回值) Thread th = new Thread(new ThreadStart(Prin ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;问题的解决
哇,时隔两天时间,终于找到这个问题的解决办法,先看问题 这是我最近写的家庭记账本网页版,按顺序输入点击保存,总是弹出添加失败的提示 顺着找原因,把原因锁定在dao层的sql语句上,反复检查,没有找到一 ...
- Spring的概念
一.思想 IOC: DI: 二.applicationContext&BeanFactory
- Paper | Contrast Limited Adaptive Histogram Equalization
目录 1. 背景 1.1. 对比度和直方图均衡HE 1.2. HE的问题 1.3. AHE 1.4. 底噪问题 2. CLAHE 2.1. 效果展示 2.2. 算法格式和细节 论文:Contrast ...
- android-glsurfaceview Activity框架程序
两个基本的类让我们使用OpenGL ES API来创建和操纵图形:GLSurfaceView和 GLSurfaceView.Renderer. 1. GLSurfaceView: 这是一个视图类,你可 ...
- spring redis @Cacheable注解使用部分错误及无效原因
spring redis @Cacheable注解使用部分错误及无效原因 说明: spring项目用到redis注解无效,解决问题中遇到一堆BUG,各种搜索,看了许多错误解决方案一一测试,对于 ...
- Linux-程序包管理
Linux上的软件安装有2种形式:源码.二进制文件,源码需要在编译环境下编译安装,二进制可以直接安装. 1.程序包管理器 rpm 程序包管理器能够将目标二进制格式(也就是从源码编译好的二进制文件,包括 ...
- [UWP] 用 AudioGraph 来增强 UWP 的音频处理能力——AudioFrameInputNode
上一篇心得记录中提到了 AudioGraph, 描述了一下 什么是 AudioGraph 以及其中涉及到的各种类型的 节点(Node). 这一篇就其中比较有意思的 AudioFrameInputNod ...