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

注意问题: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. C# 对文本文件的几种读写方法总结

    计算机在最初只支持ASCII编码,但是后来为了支持其他语言中的字符(比如汉字)以及一些特殊字符(比如€),就引入了Unicode字符集.基于Unicode字符集的编码方式有很多,比如UTF-7.UTF ...

  2. 日版iphone5 SB 配合REBELiOS卡贴破解电信3G步骤

    1.插入贴膜卡和sim卡:进入“设置—电话—sim卡应用程序”选择CDMA电信解锁: 2.越狱设备,添加cydia.gpplte.com源,安装“6S/6/5S/5C/5电信新补丁”: 3.打卡gpp ...

  3. devmem读写物理内存和devkmem读取内核虚拟内存

    关键词:/dev/mem./dev/kmem.mmap.__va.__pa.remap_pfn_range等等. 在日常工作中常有直接操作寄存器或者某一物理地址的需求,busybox中提供了devme ...

  4. ZOJ3774 Power of Fibonacci 斐波那契、二项式定理

    传送门--Vjudge 要求\(S = \sum\limits_{i=1}^n fib_i^k \mod 10^9+9\) 将通项公式\(fib_i = \frac{1}{\sqrt{5}} ((\f ...

  5. Python之使用转义序列 \n 和 \t 跟 expandtabs 函数输出表格

    示例: text = "username\temail\tpassword\nashdfh\tfiodfh@q.com\ty567\nsdfiuh\tadfhisoj@163.com\t42 ...

  6. idea免费破解

    1.下载破解补丁. https://pan.baidu.com/s/1pWCr_HIHURSAbGvvo70wKA   密码:pxkv 2.下载idea网址: https://www.jetbrain ...

  7. VUE 绑定背景图片的写法

    <div v-bind:style='{"background-image":"url("+imgUrl+")"}' >< ...

  8. ORM之自关联、add、set方法、聚合函数、F、Q查询和事务

    一.外键自关联(一对多) 1.建表 # 评论表 class Comment(models.Model): id = models.AutoField(primary_key=True) content ...

  9. BZOJ4269再见Xor——高斯消元解线性基

    题目描述 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 输入 第一行一个正整数N. 接下来一行N个非负整数. 输出 一行,包含两 ...

  10. mongoDB 小练习

    1 创建数据库名为 grade > use grade switched to db grade 2 创建集合 class 3 插入若干数据 格式如下{name:xxx,age:xxx,sex: ...