需要知道:每页多少条数据、一共多少条数据、一共需要多少页、每页从哪开始到哪结束

注意问题:1、用户输入页码为非数字。  2、用户输入页码超出页码范围

 def books(request):

     try:            #防止用户直接输入非数字
         page = int(request.GET.get("page"))  #第几页
     except:
         page = 1

     total_num = Books.objects.all().count()   #一共多少条数据
     per_page = 10                      #每页多少条数据
     total_page,m = divmod(total_num,per_page)    #一共多少页
     if m:
         total_page+=1
     if page>total_page:
         page = total_page

     start_page = (page-1)*10           #每页从那开始
     end_page = page*10                 #每页从哪结束

     books = Books.objects.all()[start_page:end_page]

     show_pages = 5      #显示多少个页码
     half_show_pages = show_pages//2
     if page < 1+half_show_pages:
         show_start_page = 1
         show_end_page = show_pages
     elif page > total_page-half_show_pages:
         show_start_page = total_page-half_show_pages*2
         show_end_page = total_page
     else:
         show_start_page = page - half_show_pages
         show_end_page = page + half_show_pages

     page_list = []
     for i in range(show_start_page,show_end_page+1):
         if i==page:
             temp = '<li class="active"><a href="/books/?page={0}">{0}</a></li>'.format(i)
         else:
             temp = '<li><a href="/books/?page={0}">{0}</a></li>'.format(i)
         page_list.append(temp)

     pre_page = page-1
     next_page = page+1
     return render(request,"books.html",locals())
 <div class="box">
     <table class="table">
         <thead>
             <tr>
                 <th>序号</th>
                 <th>书名</th>
             </tr>
         </thead>
         <tbody>
             {% for item in books %}
                 <tr>
                     <td>{{ item.id }}</td>
                     <td>{{ item.name }}</td>
                 </tr>
             {% endfor %}
         </tbody>
     </table>

     <nav aria-label="Page navigation">
       <ul class="pagination">
         <li>
             {% if page == 1 %}
               <a href="#" aria-label="Previous">
                 <span aria-hidden="true">&laquo;</span>
               </a>
             {% else %}
                 <a href="?page={{ pre_page }}" aria-label="Previous">
                     <span aria-hidden="true">&laquo;</span>
                 </a>
             {% endif %}
         </li>

         <li><a href="/books/?page=1">首页</a></li>

         {% for item in page_list %}
             {{ item|safe }}
         {% endfor %}

         <li><a href="?page={{ total_page }}">尾页</a></li>

         <li>
             {% if page == total_page %}
               <a href="#" aria-label="Previous">
                 <span aria-hidden="true">&laquo;</span>
               </a>
             {% else %}
                 <a href="?page={{ next_page }}" aria-label="Previous">
                     <span aria-hidden="true">&raquo;</span>
                 </a>
             {% endif %}
         </li>
       </ul>
     </nav>
 </div>

 <script src="/static/jquery.js"></script>
 <script src="/static/bootstrap/js/bootstrap.min.js"></script>

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. day 13 迭代器、可迭代对象、迭代器对象、生成器、生成器对象、枚举对象

    迭代器大概念 # 迭代器:循环反馈的容器(集合类型)# -- 不同于索引取值,但也可以循环的从容器对象中从前往后逐个返回内部的值​# 优点:不依赖索引,完成取值# 缺点:不能计算长度,不能指定位取值( ...

  2. Jmeter常见问题(转)

    收集工作中JMeter遇到的各种问题   1.  JMeter的工作原理是什么? 向服务器提交请求:从服务器取回请求返回的结果.   2.  JMeter的作用? JMeter可以用于测试静态或者动态 ...

  3. [转帖]Go中的下划线

    Go中的下划线 https://blog.csdn.net/wanglei9876/article/details/50475864 下划线的作用: 在import 时 是仅引入 init 函数 在正 ...

  4. deepin配置Oracle JDK

    这里记录一下入手deepin后,安装JDK的过程,和之前的CentOS有些不同 本篇参考了两篇博客 1 2 第一篇有些问题,在第二篇中找到了解决方案 接下来是操作过程: 检查本机自带的OpenJDK, ...

  5. 在CENTOS上源码搭建LNMP环境

    前言 1.操作前提: CentOS Linux release 7.5.1804: sudo用户(需要root权限): 2.需要安装的组件: nginx稳定版:nginx-1.14.0: MariaD ...

  6. CSS当中数学表达式calc

    CSS当中数学表达式calc  数学表达式calc()是CSS中的函数,主要用于数学运算.使用calc()为页面元素布局提供了便利和新的思路.本文将介绍calc()的相关内容 定义 数学表达式calc ...

  7. LOJ #2135. 「ZJOI2015」幻想乡战略游戏(点分树)

    题意 给你一颗 \(n\) 个点的树,每个点的度数不超过 \(20\) ,有 \(q\) 次修改点权的操作. 需要动态维护带权重心,也就是找到一个点 \(v\) 使得 \(\displaystyle ...

  8. Java基础 -- final关键字

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...

  9. java 简单程序

    public class a{ public static void main(String[] args) { System.out.println("Hello world") ...

  10. kubernetes云平台管理实战:HPA水平自动伸缩(十一)

    一.自动伸缩 1.启动 [root@k8s-master ~]# kubectl autoscale deployment nginx-deployment --max=8 --min=2 --cpu ...