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

注意问题: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. Linux后台命令的使用说明

    1)ctrl+Z:停止当前进程 首先先将一个程序运行起来,这个时候如果你需要去干别的事情,需要暂停运行,可以使用ctrl+Z: user@mine:/opt/user/pytorch-gender$ ...

  2. Linux内存管理 (9)mmap

    专题:Linux内存管理专题 关键词:文件映射.匿名映射.私有映射.共享映射 mmap/munmap是常用的一个系统调用,使用场景是:分配内存.读写大文件.连接动态库文件.多进程间共享内存. 更详细解 ...

  3. Struts2的核心——拦截器

    虽然以前已经学了很多的拦截器,但是在这里还是想重头梳理一下所有有关拦截器的知识,尤其是struts2中的拦截器 1:拦截器是什么? java里的拦截器是动态拦截Action调用的对象.它提供了一种机制 ...

  4. Numpy基本操作

    NumPy:数组计算 NumPy是高性能科学计算和数据分析的基础包.它是Pandas等其他各种工具的基础 NumPy的主要功能: ndarray,一个多维数据结构,高校且节省空间 无需循环即可对整组数 ...

  5. java常识

    什么是java语言? java语言是美国Sun公司,在1995年推出的高级编程语言.所谓编程语言,是计算机的语言,人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能. java语言发展历 ...

  6. OpenStack-Nova(4)

    一. Nova概述 使用OpenStack Compute来托管和管理云计算系统.OpenStack Compute是基础架构即服务(IaaS)系统的主要部分.主要模块在Python中实现. Open ...

  7. 【翻译】IdentityServer4:基于资源的配置

    这篇文章基于https://leastprivilege.com/2016/12/01/new-in-identityserver4-resource-based-configuration/进行翻译 ...

  8. luogu4770 [NOI2018]你的名字 (SAM+主席树)

    对S建SAM,拿着T在上面跑 跑的时候不仅无法转移要跳parent,转移过去不在范围内也要跳parent(注意因为范围和长度有关,跳的时候应该把长度一点一点地缩) 这样就能得到对于T的每个前缀,它最长 ...

  9. jmeter笔记(1)--原理,下载与安装

    Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静态和动态资源,例如静态文 ...

  10. Angular6封装http请求

    最近抽空学习了一下Angular6,之前主要使用的是vue,所以免不了的也想对Angular6提供的工具进行一些封装,今天主要就跟大家讲一下这个http模块. 之前使用的ajax库是axios,可以设 ...