一.分页器的函数封装

# 分页计算最小页和最大页
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的分页的更多相关文章

  1. 第二十一章 Django的分页与cookie

    第二十一章 Django的分页与cookie 第一课 模板 1.模板的继承 在Template目录下新建模板master.html <!DOCTYPE html> <html lan ...

  2. Python Django的分页,Form验证,中间件

    本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...

  3. Django----列表分页(使用Django的分页组件)

    目的:是为了实现列表分页 1.定制URL http://127.0.0.1:8000/blog/get_article?page=3之前定制URL是在url后增加了/id,这次使用参数的方式 def ...

  4. Django—自定义分页

    分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...

  5. Django自定义分页并保存搜索条件

    Django自定义分页并保存搜索条件 1.自定义分页组件pagination.py import copy class Pagination: def __init__(self, current_p ...

  6. Django DRF 分页

    Django DRF 分页 分页在DRF当中可以一共有三种,可以通过setttings设置,也可也通过自定义设置 PageNumberPagination 使用URL http://127.0.0.1 ...

  7. django之分页,纯python代码

    Django中分页 py文件代码 """ 自定义分页组件 可以返回分页的数据和分页的HTML代码 """ from django.http ...

  8. django之分页、cookie装饰器

    一.分页代码如下 from django.utils.safestring import mark_safe class Page: def __init__(self, current_page, ...

  9. django的分页--不全也未实现

    一.Django内置分页 Paginator 二.自定义分页 分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该在数据库表中的起始位置. 1.设定每页显示数据条数 2.用户输 ...

  10. Django自定义分页、bottle、Flask

    一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1"> ...

随机推荐

  1. 虚拟树Demos\Minimal 简单的例子

    //分析虚拟树demo6-VirtualTreeView\VirtualTreeViewV5.3.0\Demos\Minimal的main.pas文件 unit Main; // Demonstrat ...

  2. 校际联合Contest

    每次开一个坑都像是重新被碾压的预感 最近的新闻,以前很喜欢乔任梁的<复活>...然后他就死了...感觉我再多愁善感一点的话...就要悲伤逆流成河了吧... Contest 09/24(乐滋 ...

  3. 清华学堂 LightHouse

    灯塔(LightHouse) Description As shown in the following figure, If another lighthouse is in gray area, ...

  4. MYSQL trigger 个人记录

    同学要写个trigger,稍微帮他研究了下 以下主要是个人猜想理解的 主要讲update 我们在创建trigger时,数据库会对创建了trigger的表进行事件监听. 当表中的一条记录发生update ...

  5. UVA 10791 Minimum Sum LCM(分解质因数)

    最大公倍数的最小和 题意: 给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 那么找出一个序列,使他们的和最小. 分析: 一系列数字a1,a2,a3 ...

  6. <五>JDBC_利用反射及JDBC元数据编写通用的查询方法

    此类针对javaBean类写了一个通用的查询方法,List<javaBean> 通用查询更新中...:通过学习,深刻体会到学会反射就等于掌握了java基础的半壁江山! 一.使用JDBC驱动 ...

  7. Javascript实现页面加载完成后自动刷新一遍清除缓存文件

    我们有些时候在加载页面时,会出现缓存文件对当前文件的表现效果有干扰,如有些缓存的样式文件会是页面效果发生改变,这时我们希望页面在加载时能自动刷新一遍清楚缓存文件. 但是由于跳转页面肯定会用到BOM部分 ...

  8. js入门篇之Math对象

    Math对象用于执行数学任务 Math对象的属性: Math对象的方法: 常用属性和方法: Math.PI ----------------返回圆周率3.14 ... Math.ceil(x) --- ...

  9. Django视图与网址

    Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数(或者generic类),我们用一个项目来演示. 下载本节所有源代码: 学习编程最好的办法就是动手敲代 ...

  10. C#编译执行过程

    前言 大家好,我是卫斯理(Wesley).喜欢武侠的朋友可能知道小说中也有个卫斯理,他是位冒险家,财力充沛,极富冒险精神,并且有着超强的好奇心,对奇异的事情总有"打破沙锅问到底"的 ...