django的分页
一.分页器的函数封装
# 分页计算最小页和最大页
def page_list_return(total, current=1):
'''
分页,返回本次分页的最小页数和最大页数列表
:param total:
:param current:
:return:
'''
min_page = current - 2 if current - 4 > 0 else 1
max_page = current + 4 if current + 4 < total else total
return list(range(min_page, max_page + 1)) # 分页器
def pages(post_objects, request):
'''
分页公共函数,返回分页的对象元组
:param post_objects:
:param request:
:return:
'''
# 分页器
paginator = Paginator(post_objects, 10)
try:
# 本页页码
current_page = int(request.GET.get('page', ''))
except ValueError:
current_page = 1
# 所有页码
page_range = page_list_return(len(paginator.page_range), current_page)
try:
# 本页对象
page_objects = paginator.page(current_page)
except (EmptyPage, InvalidPage):
page_objects = paginator.page(paginator.num_pages) if current_page >= 5:
show_first = 1
else:
show_first = 0
if current_page <= (len(paginator.page_range) - 3):
show_end = 1
else:
show_end = 0
# 所有对象,分页器,本页对象,所有页码,本业页码,是否显示第一页,是否显示最后一页
return post_objects, paginator, page_objects, page_range, current_page, show_first, show_end
二.view页面的传递
def menu_list(request):
header_title, path = '菜单详情', '菜单详情'
menus_list = MenuInfo.objects.all()
menus_list, p, page_obj, page_range, current_page, show_first, show_end = pages(menus, request)
return render(request, 'menu/menu_list.html',locals())
三.前端页面的代码
<div class="col-sm-7">
<div class="dataTables_paginate paging_simple_numbers" id="editable_paginate">
<ul class="pagination">
{% if page_obj.has_previous %}
<li class="paginate_button previous " id="editable_previous">
<a class="page" href="?page={{ page_obj.previous_page_number }}" aria-controls="editable"
data-dt-idx="0"
tabindex="0">上一页</a>
</li> {% else %}
<li class="paginate_button previous disabled" id="editable_previous">
<a class="page" aria-controls="example1" data-dt-idx="0" tabindex="0">上一页</a>
</li>
{% endif %}
{% ifequal show_first 1 %}
<li class="paginate_button">
<a class="page" href="?page=1" aria-controls="editable" data-dt-idx="1" tabindex="0">1..</a>
</li>
{% endifequal %} {% for page in page_range %}
{% ifequal current_page page %}
<li class="paginate_button active">
<a class="page" href="?page={{ page }}" aria-controls="editable" data-dt-idx="1" tabindex="0"
title="第{{ page }}页">{{ page }}</a>
</li>
{% else %}
<li class="paginate_button">
<a class="page" href="?page={{ page }}" aria-controls="editable" data-dt-idx="1" tabindex="0"
title="第{{ page }}页">{{ page }}</a>
</li>
{% endifequal %} {% endfor %}
{% ifequal show_end 1 %}
<li class="paginate_button">
<a class="page" href="?page={{ p.num_pages }}" aria-controls="editable" data-dt-idx="1" tabindex="0"
title="第{{ page }}页">...{{ p.num_pages }}</a>
</li>
{% endifequal %}
{% if page_obj.has_next%}
<li class="paginate_button next " id="editable_next">
<a class="page" href="?page={{ page_obj.next_page_number }}" aria-controls="editable"
data-dt-idx="1"
tabindex="0">下一页</a>
</li>
{% else %}
<li class="paginate_button next disabled " id="editable_next">
<a class="page" aria-controls="editable"
data-dt-idx="1"
tabindex="0">下一页</a>
</li>
{% endif %} </ul>
</div>
</div>
django的分页的更多相关文章
- 第二十一章 Django的分页与cookie
第二十一章 Django的分页与cookie 第一课 模板 1.模板的继承 在Template目录下新建模板master.html <!DOCTYPE html> <html lan ...
- Python Django的分页,Form验证,中间件
本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...
- Django----列表分页(使用Django的分页组件)
目的:是为了实现列表分页 1.定制URL http://127.0.0.1:8000/blog/get_article?page=3之前定制URL是在url后增加了/id,这次使用参数的方式 def ...
- Django—自定义分页
分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...
- Django自定义分页并保存搜索条件
Django自定义分页并保存搜索条件 1.自定义分页组件pagination.py import copy class Pagination: def __init__(self, current_p ...
- Django DRF 分页
Django DRF 分页 分页在DRF当中可以一共有三种,可以通过setttings设置,也可也通过自定义设置 PageNumberPagination 使用URL http://127.0.0.1 ...
- django之分页,纯python代码
Django中分页 py文件代码 """ 自定义分页组件 可以返回分页的数据和分页的HTML代码 """ from django.http ...
- django之分页、cookie装饰器
一.分页代码如下 from django.utils.safestring import mark_safe class Page: def __init__(self, current_page, ...
- django的分页--不全也未实现
一.Django内置分页 Paginator 二.自定义分页 分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该在数据库表中的起始位置. 1.设定每页显示数据条数 2.用户输 ...
- Django自定义分页、bottle、Flask
一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1"> ...
随机推荐
- DNS域名解析过程
图1-10是DNS域名解析的主要请求过程实例图. 如图1-10所示,当一个用户在浏览器中输入www.abc.com时,DNS解析将会有将近10个步骤,这个过程大体描述如下.当用户在浏览器中输入域名并按 ...
- 二维树状数组 BZOJ 1452 [JSOI2009]Count
题目链接 裸二维树状数组 #include <bits/stdc++.h> const int N = 305; struct BIT_2D { int c[105][N][N], n, ...
- spark API 介绍链接
spark API介绍: http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html#aggregateByKey
- 真刀真枪压测:基于TCPCopy的仿真压测方案
郑昀 基于刘勤红和石雍志的实践报告 创建于2015/8/13 最后更新于2015/8/19 关键词:压测.TCPCopy.仿真测试.实时拷贝流量 本文档适用人员:技术人员 提纲: 为什么要做仿真测试 ...
- linux install Theano+Tensorflow+Keras
安装过程中,网络状态一定要好,如果安装过程中出现time out的提示信息,今天就可以洗洗睡啦,等明天网络状态好的时候再安装. 安装过程出现不知名的错误的时候,执行第一步,update一下 1.#up ...
- sqlserver跨服务器数据库sql语句
1.启用Ad Hoc Distributed Queries:exec sp_configure 'show advanced options',1reconfigureexec sp_configu ...
- ubuntu安装配置elasticSearch(vagrant)
安装jdk sudo apt-get install python-software-properties sudo add-apt-repository ppa:webupd8team/java s ...
- 11.static关键字
1.用static修饰的方法,直接用类调用 2.static修饰的方法只能调用static方法,不能调用非 static属性和方法 ①因为static属性和方法在类没有实例化的时候调用 ②因为普通属 ...
- *HDU 1385 最短路 路径
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- 错误Batch update returned unexpected row count from update [0]; actual row count: 0;
参考:http://blog.csdn.net/ssyan/article/details/7471343 也是出现类似问题,在前台页面的隐藏域中判断id是否为null,而没有去判断是否为空字符串. ...