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

注意问题: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. 014_浅说 XSS和CSRF

    在 Web 安全领域中,XSS 和 CSRF 是最常见的攻击方式.本文将会简单介绍 XSS 和 CSRF 的攻防问题. 声明:本文的示例仅用于演示相关的攻击原理 XSS XSS,即 Cross Sit ...

  2. error C2381: “exit”: 重定义;__declspec(noreturn) 不同

    问题: error C2381: “exit” : 重定义:__declspec(noreturn) 不同 解决办法: 调换一下头文件的包含次序: #include <GL/glut.h> ...

  3. lombook安装以及在eclipse和idea上配置

    一.安装 a.官网上的安装方法 1.点击Download! 2.点击确认下载 3.下载完成,双击打开,点击“open”即可 4.之后会自动找到你的IDE如Eclipse,点击“install/upda ...

  4. triplet loss 在深度学习中主要应用在什么地方?有什么明显的优势?

    作者:罗浩.ZJU链接:https://www.zhihu.com/question/62486208/answer/199117070来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  5. Luogu P5280 [ZJOI2019]线段树

    送我退役的神题,但不得不说是ZJOIDay1最可做的一题了 先说一下考场的ZZ想法以及出来后YY的优化版吧 首先发现每次操作其实就是统计出增加的节点个数(原来的不会消失) 所以我们只要统计出线段树上每 ...

  6. MYSQL 两表 排除 重复记录

    MySQL之——查询重复记录.删除重复记录方法大全 - 冰河的专栏 - CSDN博客https://blog.csdn.net/l1028386804/article/details/51733585 ...

  7. Pyspark 使用 Spark Udf 的一些经验

    起初开始写一些 udf 的时候感觉有一些奇怪,在 spark 的计算中,一般通过转换(Transformation) 在不触发计算(Action) 的情况下就行一些预处理.udf 就是这样一个好用的东 ...

  8. ABP项目概述

    在系统性介绍整个ABP框架之前,我们首先需要对ABP框架有一个大概的了解,ABP框架的全称是:Asp.Net Boilerplate Project(即Asp.Net 的样板项目)顾名思义就是能够通过 ...

  9. c语言第三次课

    一.const的使用1)const声明变量为只读 ; a = ; //error ] = "abcdef"; const char *p = buf; char const *p ...

  10. Kickstart 和 Cobbler ks.cfg文件详解

    ks.cfg文件组成大致分为3段 命令段 键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项 软件包段 %packages @groupn ...