一.分页器的函数封装

  1. # 分页计算最小页和最大页
  2. def page_list_return(total, current=1):
  3. '''
  4. 分页,返回本次分页的最小页数和最大页数列表
  5. :param total:
  6. :param current:
  7. :return:
  8. '''
  9. min_page = current - 2 if current - 4 > 0 else 1
  10. max_page = current + 4 if current + 4 < total else total
  11. return list(range(min_page, max_page + 1))
  12.  
  13. # 分页器
  14. def pages(post_objects, request):
  15. '''
  16. 分页公共函数,返回分页的对象元组
  17. :param post_objects:
  18. :param request:
  19. :return:
  20. '''
  21. # 分页器
  22. paginator = Paginator(post_objects, 10)
  23. try:
  24. # 本页页码
  25. current_page = int(request.GET.get('page', ''))
  26. except ValueError:
  27. current_page = 1
  28. # 所有页码
  29. page_range = page_list_return(len(paginator.page_range), current_page)
  30. try:
  31. # 本页对象
  32. page_objects = paginator.page(current_page)
  33. except (EmptyPage, InvalidPage):
  34. page_objects = paginator.page(paginator.num_pages)
  35.  
  36. if current_page >= 5:
  37. show_first = 1
  38. else:
  39. show_first = 0
  40. if current_page <= (len(paginator.page_range) - 3):
  41. show_end = 1
  42. else:
  43. show_end = 0
  44. # 所有对象,分页器,本页对象,所有页码,本业页码,是否显示第一页,是否显示最后一页
  45. return post_objects, paginator, page_objects, page_range, current_page, show_first, show_end

二.view页面的传递

  1. def menu_list(request):
  2. header_title, path = '菜单详情', '菜单详情'
  3. menus_list = MenuInfo.objects.all()
  4. menus_list, p, page_obj, page_range, current_page, show_first, show_end = pages(menus, request)
  5. return render(request, 'menu/menu_list.html',locals())

三.前端页面的代码

  1. <div class="col-sm-7">
  2. <div class="dataTables_paginate paging_simple_numbers" id="editable_paginate">
  3. <ul class="pagination">
  4. {% if page_obj.has_previous %}
  5. <li class="paginate_button previous " id="editable_previous">
  6. <a class="page" href="?page={{ page_obj.previous_page_number }}" aria-controls="editable"
  7. data-dt-idx="0"
  8. tabindex="0">上一页</a>
  9. </li>
  10.  
  11. {% else %}
  12. <li class="paginate_button previous disabled" id="editable_previous">
  13. <a class="page" aria-controls="example1" data-dt-idx="0" tabindex="0">上一页</a>
  14. </li>
  15. {% endif %}
  16. {% ifequal show_first 1 %}
  17. <li class="paginate_button">
  18. <a class="page" href="?page=1" aria-controls="editable" data-dt-idx="1" tabindex="0">1..</a>
  19. </li>
  20. {% endifequal %}
  21.  
  22. {% for page in page_range %}
  23. {% ifequal current_page page %}
  24. <li class="paginate_button active">
  25. <a class="page" href="?page={{ page }}" aria-controls="editable" data-dt-idx="1" tabindex="0"
  26. title="第{{ page }}页">{{ page }}</a>
  27. </li>
  28. {% else %}
  29. <li class="paginate_button">
  30. <a class="page" href="?page={{ page }}" aria-controls="editable" data-dt-idx="1" tabindex="0"
  31. title="第{{ page }}页">{{ page }}</a>
  32. </li>
  33. {% endifequal %}
  34.  
  35. {% endfor %}
  36. {% ifequal show_end 1 %}
  37. <li class="paginate_button">
  38. <a class="page" href="?page={{ p.num_pages }}" aria-controls="editable" data-dt-idx="1" tabindex="0"
  39. title="第{{ page }}页">...{{ p.num_pages }}</a>
  40. </li>
  41. {% endifequal %}
  42. {% if page_obj.has_next%}
  43. <li class="paginate_button next " id="editable_next">
  44. <a class="page" href="?page={{ page_obj.next_page_number }}" aria-controls="editable"
  45. data-dt-idx="1"
  46. tabindex="0">下一页</a>
  47. </li>
  48. {% else %}
  49. <li class="paginate_button next disabled " id="editable_next">
  50. <a class="page" aria-controls="editable"
  51. data-dt-idx="1"
  52. tabindex="0">下一页</a>
  53. </li>
  54. {% endif %}
  55.  
  56. </ul>
  57. </div>
  58. </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. 数位DP GYM 100827 E Hill Number

    题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...

  2. XAMPP PHPSTORM XDEBUG 配合使用

    1.xdebug 配置 安装完xampp 进入 php.ini [XDebug]zend_extension = "C:\xampp\php\ext\php_xdebug.dll" ...

  3. iOS 消息推送(APNs) 傻瓜式教程

    也可以去我的简书页面查看这篇文章 首先: 1.做iOS消息推送需要真机测试 2.做iOS消息推送需要有付费的开发者账号 是否继续看帖? 先学习一下相关的知识吧! 因为中途可能会遇到一些问题,这篇文章或 ...

  4. CodeForces460B. Little Dima and Equation

    B. Little Dima and Equation time limit per test 1 second memory limit per test 256 megabytes input s ...

  5. 在Oracle SQLplus下建用户 建表

    在建表之前最好新建一个用户,因为在sys用户下的表格不允许删除列, 所以最好不要在sys用户下建表. 一.在Oracle SQLplus下建用户: 1.以dba身份登陆SQLplus: [oracle ...

  6. [html] 有利于seo优化的div+css命名规范

    搜索引擎优化(seo)对命名规范有很多要求,下面是我收集的一些当下主流的命名(还是比较常用的): CSS样式命名 说明 网页公共命名 #wrapper 页面外围控制整体布局宽度 #container或 ...

  7. SQLite的原子提交原理

    本文描述了sqlite为保证数据库文件不被损坏而采取的种种手段.. 以下是原译者的摘要:http://www.kuqin.com/shuoit/20150618/346693.html 摘要: 本文源 ...

  8. 中國區的代理協議的韓國遊戲廠商PatiGames

    “與阿裏巴巴簽署旗下游戲「突突三國」在中國區的代理協議的韓國遊戲廠商PatiGames決定與阿裏巴巴終止合作.”相信這條前不久報導的新聞,很多人並不陌生,但這背後其實並不像表面那樣簡單.早在今年4月P ...

  9. eclipse如何快速查找某个类

    2. [Ct rl+Shift +T ]    查找工作空间(Workspace)构建路径中的可找到Java类文件,不要为找不到类而痛苦,而且可以使用“*”.“?”等通配符. 3. 当我们编写了很多的 ...

  10. LoadRunner - 001

    lr_eval_string():函数的主要作用:返回脚本中的一个参数当前的值,返回值类型:char一般多用在调试脚本时输出参数的值.具体用法如下:lr_output_message("Th ...