django-分页(非海量数据)
views.py
class AnalysisDataHandler(View):
def get(self, request):
analysis_data = MonitorCenterDataAnalysis.objects.all().order_by('create_time').reverse()
paginator = Paginator(analysis_data, 2) # 每页显示10条数据
num_pages = paginator.num_pages # 总页数
page = request.GET.get('page')
if not page:
page = 1
else:
page = int(page)
#分页方式:以5页为基准
#一:少于5页
#无:页码按钮及左右侧翻页按钮都不存在
#有:左右侧按钮至少存在一个,并且有全部页码按钮
#二:大于等于5页
#左侧、右侧翻页按钮至少一个存在,并且有5页码按钮
try:
analysis_data = paginator.page(page) if num_pages < 5:
page_num_list = [i for i in range(1, num_pages+1)]
elif page in [1, 2, 3]:
page_num_list = [1, 2, 3, 4, 5]
elif page in [num_pages-1, num_pages-2, num_pages]:
page_num_list = [i for i in range(num_pages-4, num_pages+1)]
else:
page_num_list = [i for i in range(page-2, page+3)]
analysis_data.page_num_list = page_num_list
except PageNotAnInteger:
# 如果page不是一个整数,则展示第一页。
analysis_data = paginator.page(1)
except EmptyPage:
# 如果page不在范围内(例如,9999),则展示结果的最后一页。
analysis_data = paginator.page(paginator.num_pages) return render(request, 'flowmgr/analysis_data.html', {'analysis_data': analysis_data})
analysis_data.html
<div style="float: right">
<ul class="pagination">
{% if analysis_data.has_previous %}
<li>
<a href="?page={{ analysis_data.previous_page_number }}" aria-label="上一页">
<span aria-hidden="true">«</span>
</a>
</li>
{% endif %}
{% for index in analysis_data.page_num_list %}
{% if index == analysis_data.number %}
<li class="disabled"><a href="?page={{ index }}">{{ index }}</a></li>
{% else %}
<li class="active"><a href="?page={{ index }}">{{ index }}</a></li>
{% endif %}
{% endfor %}
{% if analysis_data.has_next %}
<li>
<a href="?page={{ analysis_data.next_page_number }}" aria-label="下一页">
<span aria-hidden="true">»</span>
</a>
</li>
{% endif %}
</ul>
</div
django-分页(非海量数据)的更多相关文章
- Django分页的实现
Django分页的实现 Django ORM 分页介绍 分页是网页浏览中常见到的一种形式,在数据量较大时,一个页面显示不全,采取分割数据由用户选择进行显示的方式. 基本实现 技术点 通过切片得到数据 ...
- Django 分页查询并返回jsons数据,中文乱码解决方法
Django 分页查询并返回jsons数据,中文乱码解决方法 一.引子 Django 分页查询并返回 json ,需要将返回的 queryset 序列化, demo 如下: # coding=UTF- ...
- django 分页(2) 使用类 页码显示
django 分页显示页码 views.py 显示11页码 ) < 起始位置 - 10总页数 else 总页数 > IF 当前页 小于 起始位置 结束页 IF 当前页 大于 IF 如果结束 ...
- Django 分页功能
Django 分页功能比较强大,这边是结合官网的内容写的可以参考 https://docs.djangoproject.com/en/1.9/topics/pagination/ 分页命令行练习案列 ...
- 原生的 django 分页
原始的 django 分页 # 基本 写法 class Paginator(object): def __init__(self, object_list, per_page, orphans=0, ...
- django 分页组件
一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib i ...
- Django分页(二)
Django分页(二) 要求 .设定每页显示数据条数 # # .用户输入页码(第一页.第二页...) # # .设定显示多少页号 # # .获取当前数据总条数 # # .根据设定显示多少页号和数据总条 ...
- Django分页(一)
Django分页(一) 手动实现简单分页 HTML <!DOCTYPE html> <html lang="en"> <head> <me ...
- django 分页出现 UnorderedObjectListWarning 错误
django 分页出现此错误: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unorde ...
- 2019.03.20 mvt,Django分页
MVT模式 MVT各部分的功能: M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理. V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返 ...
随机推荐
- Shiro Web集成及拦截器机制(四)
Shiro与 Web 集成 Shiro 提供了与 Web 集成的支持,其通过一个 ShiroFilter 入口来拦截需要安全控制的 URL,然后进行相应的控制,ShiroFilter 类似于如 Str ...
- 【学习笔记】Linux基础(一):磁盘分区与Linux的安装(以CentOS为例)
一.磁盘分区与Linux的安装(以CentOS为例) 0.说在安装之前 在Linux中,"一切设备皆文件",设备在/dev这个目录下 /dev/sd[a-p] 表示SCSI/SAT ...
- C++基类和派生类的构造函数
派生类不能继承基类的构造函数,若想通过派生类来对基类的private的变量成员进行初始化则需要: 通过派生类的构造函数来调用基类的构造函数完成基类成员变量的初始化. 看下面的例子: #include ...
- 三、 TCP(传输控制协议)
它建立在网际层协议(IP)提供的数据包传输技术之上,.TCP使应用程序可使用连续的数据进行通信.除非由于网络故障导致连接中断或冻结,TCP都能保证数据流完好地传输.而不会发生丢包 ,重包或是乱序的问题 ...
- 第一次安装android studio遇到的问题
安装android studio一点都不顺利,最后总是成功安装,但是忘了把问题记录下来,下一次肯定还肯能出现问题 忘了把问题记录下来了,好像是sync failed 第一次安装3.1.4遇到的问题,好 ...
- Features for Multi-Target Multi-Camera Tracking and Re-identification论文解读
解读一:Features for Multi-Target Multi-Camera Tracking and Re-identification Abstract MTMCT:从多个摄像头采集的视频 ...
- 独立磁盘冗余阵列-RAID
一.RAID概述 RAID(Redundant Array of Independent Disks)即独立冗余磁盘阵列 磁盘阵列就是.由很多块廉价磁盘 组成的一个容量巨大的卷组.然后在使用不同级别的 ...
- ssh连接超时的问题
vi /etc/ssh/sshd_config ClientAliveInterval ClientAliveCountMax # 注: # ClientAliveInterval选项定义了每隔多少秒 ...
- [Effective Java 读书笔记] 第二章 创建和销毁对象 第一条
第二章 创建和销毁对象 第一条 使用静态工厂方法替代构造器,原因: 静态工厂方法可以有不同的名字,也就是说,构造器只能通过参数的不同来区分不同的目的,静态工厂在名字上就能表达不同的目的 静态工厂方法 ...
- Qt 条件编译 arm windows linux 判断 跨平台
如果代码里面有些判断需要不同的参数做判断: 办法:在pro文件里面做定义 方法1:直接定义一个宏:用的时候可以直接判断,这样做不好的地方是编译前需要重新切换一下宏 1)定义宏 DEFINES += _ ...