py code...

  1. from django.core.paginator import Paginator
  2.  
  3. class NewsListView(View):
  4. def get(self, request):
  5. '''分页'''
  6. page = int(request.GET.get('page', 1)) # 第多少页,默认1
  7. print(page)
  8. newses = News.objects.select_related("category", "author").all()
  9. categories = NewsCategory.objects.all()
  10.  
  11. p = Paginator(newses, 5) # 每页显示n条数据
  12. page_obj = p.page(page) # 第n页的 page对象 <Page 1 of n>
  13.  
  14. current_page_newses = page_obj.object_list # not func!! 当前页的newes所有数据 设置的是显示一条data
  15. context = {
  16. 'newses': page_obj.object_list,
  17. 'categories': categories,
  18. 'p': p,
  19. 'current_page': page
  20. }
  21. context.update(self.get_paging_data(p , page_obj, show_pages=2, page=page))
  22. return render(request, 'cms/news_list.html', context=context)
  23.  
  24. def get_paging_data(self, paginator, page_obj, show_pages,page=None):
  25. """
  26. 分页当前页的左右范围
  27. :param paginator: Paginator(obj, number)对象
  28. :param page_obj: # 第n页的 page对象 <Page 1 of n> page_obj.number获取当前页
  29. :param show_pages: 当前页左右展示的页数
  30. :param page: 当前页 ps:可选参数
  31. :return: 当前页左右显示的页数range对象 和 has_left(right)_more Bool值,用来判断是否显示 分页的省略号 ...
  32. """
  33. current_page = page_obj.number
  34. show_pages = show_pages
  35. pages_number = paginator.num_pages
  36.  
  37. has_left_more = False
  38. has_right_more = False
  39. # 左边的逻辑判断
  40. print(current_page, 'c')
  41. if current_page <= show_pages + 2:
  42. left_start = 1
  43. left_end = current_page
  44. else:
  45. has_left_more = True
  46. left_start = current_page - show_pages
  47. left_end = current_page
  48. left_range = range(left_start, left_end)
  49. # 右边的逻辑判断(在右边包括了当前页)
  50. if current_page >= pages_number - show_pages - 1:
  51. right_start = current_page
  52. right_end = pages_number + 1
  53. else:
  54. has_right_more = True
  55. right_start = current_page
  56. right_end = current_page + show_pages + 1
  57. right_range = range(right_start, right_end)
  58. data = {
  59. 'left_range': left_range,
  60. 'right_range': right_range,
  61. 'has_left_more': has_left_more,
  62. 'has_right_more': has_right_more,
  63. 'current_page': current_page,
  64. }
  65. print(left_range, has_left_more)
  66. return data

html code

  1. <link rel="stylesheet" href="{% static 'adminlte/bower_components/bootstrap/dist/css/bootstrap.min.css' %}">
  2. <link rel="stylesheet" href="{% static 'adminlte/bower_components/font-awesome/css/font-awesome.min.css' %}">
  3. <link rel="stylesheet" href="{% static 'adminlte/dist/css/AdminLTE.min.css' %}">
  4. <link rel="stylesheet" href="{% static 'adminlte/dist/css/skins/_all-skins.min.css' %}">
  5. <link rel="stylesheet" href="{% static 'sweetalert/sweetalert.css' %}">
  6. <script src="{% static 'adminlte/bower_components/jquery/dist/jquery.min.js' %}"></script>
  7. <script src="{% static 'adminlte/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
  8. <script src="{% static 'adminlte/dist/js/adminlte.min.js' %}"></script>
  9. <script src="{% static 'sweetalert/sweetalert.min.js' %}"></script>
  10. <script src="{% static 'sweetalert/xfzalert.js' %}"></script>
  11. <script src="{% static 'js/xfzajax.js' %}"></script>
  12. <script src="{% static 'js/message.js' %}"></script>
  1. {% block content %}
  2. <div class="box">
  3. <div class="box-header">
  4. <form class="form-inline">
  5. <div class="form-group">
  6. <div class="pull-left margins">
  7. <label for="start-input">时间:</label>
  8. <input readonly class="form-control" type="text" id="start-input" placeholder="开始时间">
  9. <span>-</span>
  10. <input readonly class="form-control" type="text" placeholder="结束时间">
  11. </div>
  12. </div>
  13. <div class="form-group margins">
  14. <label for="title-input">标题:</label>
  15. <input class="form-control" type="text" id="title-input" placeholder="关键字">
  16. </div>
  17. <div class="form-group margins">
  18. <label for="">分类:</label>
  19. <select class="form-control" name="" id="category-input">
  20. {% for category in categories %}
  21. <option value="">{{ category.name }}</option>
  22. {% endfor %}
  23. </select>
  24. </div>
  25. <div class="form-group margins">
  26. <button class="btn btn-primary btn-sm clear-btn">查询</button>
  27. </div>
  28. <div class="form-group margins">
  29. <a href="{% url 'cms:news_list' %}" class="btn btn-info btn-sm">清除查询</a>
  30. </div>
  31. </form>
  32. </div>
  33. <div class="box-body">
  34. <table class="table table-bordered">
  35. <thead>
  36. <tr>
  37. <th>标题</th>
  38. <th>分类</th>
  39. <th>发布时间</th>
  40. <th>作者</th>
  41. <th>操作</th>
  42. </tr>
  43. </thead>
  44. <tbody>
  45. {% for news in newses %}
  46. <tr>
  47. <td>
  48. <a href="{% url 'news:news_detail' news_id=news.pk %}">{{ news.title }}</a>
  49. </td>
  50. <td>{{ news.category.name }}</td>
  51. <td>{{ news.pubtime | cms_date_filter }}</td>
  52. <td>{{ news.author.username }}</td>
  53. <td>
  54. <button class="btn btn-warning btn-xs">编辑</button>
  55. <button class="btn btn-danger btn-xs">删除</button>
  56. </td>
  57. </tr>
  58. {% endfor %}
  59. </tbody>
  60. </table>
  61. </div>
  62. <div class="box-footer">
  63. <span class="pull-left">第{{ current_page }}页/共{{ p.num_pages }}页</span>
  64. <nav aria-label="Page navigation" class="pull-right">
  65. <ul class="pagination">
  66. {# 前一页 #}
  67. {% if page_obj.has_previous %}
  68. <li>
  69. <a href="?page={{ page_obj.previous_page_number }}" aria-label="Previous">
  70. <span aria-hidden="true">&laquo;</span>
  71. </a>
  72. </li>
  73. {% else %}
  74. <li class="disabled">
  75. <span aria-hidden="true">&laquo;</span>
  76. </li>
  77. {% endif %}
  78.  
  79. {# 当前页左边部分 #}
  80. {% if has_left_more %}
  81. <li><a href="?page=1">1</a></li>
  82. <li><span>...</span></li>
  83. {% for page in left_range %}
  84. <li><a href="?page={{ page }}">{{ page }}</a></li>
  85. {% endfor %}
  86. {% else %}
  87. {% for page in left_range %}
  88. <li><a href="?page={{ page }}">{{ page }}</a></li>
  89. {% endfor %}
  90. {% endif %}
  91. {# 当前页右边部分 ,包括了当前页 #}
  92. {% if has_right_more %}
  93. {% for page in right_range %}
  94. <li><a href="?page={{ page }}">{{ page }}</a></li>
  95. {% endfor %}
  96. <li><span>...</span></li>
  97. <li><a href="?page={{ p.num_pages }}">{{ p.num_pages }}</a></li>
  98. {% else %}
  99. {% for page in right_range %}
  100. <li><a href="?page={{ page }}">{{ page }}</a></li>
  101. {% endfor %}
  102. {% endif %}
  103.  
  104. {# 后一页 #}
  105. {% if page_obj.has_next %}
  106. <li>
  107. <a href="?page={{ page_obj.next_page_number }}" aria-label="Next" class="disabled">
  108. <span aria-hidden="true">&raquo;</span>
  109. </a>
  110. </li>
  111. {% else %}
  112. <li class="disabled">
  113. <span aria-hidden="true">&raquo;</span>
  114. </li>
  115. {% endif %}
  116.  
  117. </ul>
  118. </nav>
  119. </div>
  120. </div>
  121. {% endblock %}

django-paginator的更多相关文章

  1. $Django Paginator分页器 批量创建数据

    1批量插入数据: User_list=[]for i in range(100): User_list.append(User(name='小明%s'%i,pwd='abcdefg%s'%i))# 两 ...

  2. Django paginator and Form

    django  提供的分页器 django 官方链接: https://docs.djangoproject.com/en/1.11/topics/pagination/ django提供了一些类来帮 ...

  3. django Paginator 让分页变得完美

    参考大佬地址:https://www.zmrenwu.com/courses/django-blog-tutorial/materials/21/ 类视图 from django.contrib.au ...

  4. Django Paginator分页器

    如何实现在django中实现分页效果,我使用的是django自带的分页器paginator具体是使用办法是这样的首先引用from django.core.paginator import Pagina ...

  5. Django——Paginator分页功能练习

    1.路由urls.py from django.contrib import admin from django.urls import path from app01.views import in ...

  6. Django 之 Paginator 分页功能

    Django Paginator Django 分页官方文档  https://docs.djangoproject.com/en/1.10/topics/pagination/ 此分页方法没有限制显 ...

  7. Django REST Framework API Guide 08

    1.Filtering 2.Pagination FIltering GenericAPIView的子类筛选queryset的简单方法是重写.get_quueryset()方法. 1.根据当前用户进行 ...

  8. django之补充

    一 QuerySet类型 QuerySet类型:只和orm有关,如果一涉及数据库,就会有QuerySet类型的出现. QuerySet切片操作:QuerySet是支持切片操作的,不过不能放负数.查询集 ...

  9. 利用rest-framework实现django应用的分页功能

    自定义分页的类,继承 PageNumberPagination class StandardResultsSetPagination(PageNumberPagination): page_size ...

  10. django原生sql

    参考:http://www.jb51.net/article/128257.htm coding=utf-8 from django.core.paginator import Paginator d ...

随机推荐

  1. js模板引擎---jtemplates使用

    昨天记录了如何使用腾讯的模板引擎,今天记录一下jquery的模板引擎jtemplates.官网:http://jtemplates.tpython.com/ 编写模板:需要在页面引入jquery和jt ...

  2. ostringstream的用法

    使用stringstream对象简化类型转换C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性.类型安全和可扩展性.在本文中, ...

  3. 在Win7下新建库并修改图标

    win7中在库中添加桌面方法详解 1.在空白处,鼠标右键选择新建——库. 2.命名为桌面,然后选择桌面. 3.鼠标右键选择属性. 4.点击包括文件夹. 5.选择桌面,点击包括文件夹按钮. 6.点击确定 ...

  4. putty SSH tunnel function

    github & dynamic

  5. POJ3468——树状数组支持两个区间操作

    题目:http://poj.org/problem?id=3468 推断过程可自己查,得式子:fixsum(x) = (x+1) * ∑(i=1,x)fi - ∑(i=1,x)i*fi; 其中 f 是 ...

  6. Hadoop集群搭建笔记

    1.安装虚拟机 VMware workstation CentOS 镜像 安装Linux虚拟机:(在Win7上) 1)安装VMwareWorkstations(可修改配置) 2)添加CentOS镜像( ...

  7. Openwrt 3g模块

    支持Huawei E367 一.编译选项的选择 都选上 都选上 Network目录下 Utiles Luci 二.USB连接3G模块时,显示如下,表示成功 三.没找到:

  8. Django安装与介绍

    安装 Django是以Python为语言环境的,所以要先确保计算机上已经安装了Python. Linux ubuntu: sudo pip install Django==1.11.7 安装中指定了版 ...

  9. SQL 计算某月有多少天

    今天用SQL Server 2005写查询语句,要求计算一个月平均每天发生的金额.以前往往喜欢查询相关的所有列,在代码中进行计算,还没有在SQL中写过. 第一印象就是:要考虑到润年还是平年,再判断是大 ...

  10. WPF Demo6

    通知项熟悉.数据绑定 using System.ComponentModel; namespace Demo6 { /// <summary> /// 通知项属性 /// </sum ...