一.分页器的函数封装

# 分页计算最小页和最大页
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. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  2. Django+Tastypie作后端,Backbone作前端的TodoMVC

    TodoMVC是各种js框架入门的比较经典的例子,详细可查看github地址https://github.com/tastejs/todomvc 接着上篇文章, 1,先在github上把backbon ...

  3. eclipse调试solr

    eclipse调试solr 现在solr的源码包,我这里是4.10.2, 编译, ant ivy-bootstrap ant eclipse 导入elipse,将solr/example/solr/下 ...

  4. 拓扑排序 - 并查集 - Rank of Tetris

    Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...

  5. 【BZOJ】3542: DZY Loves March

    题意 \(m * m\)的网格,有\(n\)个点.\(t\)个询问:操作一:第\(x\)个点向四个方向移动了\(d\)个单位.操作二:询问同行同列其他点到这个点的曼哈顿距离和.强制在线.(\(n \l ...

  6. Eclipse 报java.lang.OutOfMemoryError: PermGen space错

    这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage C ...

  7. Linux下面桌面的安装

    挂载光盘后配置yum文件,配置后 使用yum grouplist 命令 查看组 用yum install '"GNOM桌面组 输入 init 5   即可进入桌面模式 0 关机  3命令行级 ...

  8. makefile 笔记

    1.Makefile中命令前的@和-符号 如果make执行的命令前面加了@字符,则不显示命令本身而只显示它的结果; Android中会定义某个变量等于@,例如 hide:= @ 通常make执行的命令 ...

  9. jQuery实现的简单小功能(实用)

    1.返回顶部使用JQuery的animate和scrollTop方法可以创建简单地返回顶部的动画: // Back to top $('#top').click(function (e) { e.pr ...

  10. CentOS下设置默认JDK

    最近在弄Linux,用yum源安装opnjdk-devel版本后,用命令ll /etc/alternatives/java查看,发现指向的是jre目录,而不是jdk,在此设置指向jdk目录. 1. 设 ...