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

注意问题: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. AI AutoML

    AutoML 参考链接: https://arxiv.org/pdf/1810.13306.pdf http://nooverfit.com/wp/7%E4%B8%AA%E4%BD%A0%E5%8F% ...

  2. TCP三次握手原理,你真的了解吗?

    最近碰到一个问题,Client 端连接服务器总是抛异常.在反复定位分析.并查阅各种资料搞懂后,我发现并没有文章能把这两个队列以及怎么观察他们的指标说清楚. 问题描述 场景:Java 的 Client ...

  3. C#模板设计模式使用和学习心得

    模板设计模式: 模版方法模式由一个抽象类和一个(或一组)实现类通过继承结构组成,抽象类中的方法分为三种: 抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现. 模版方法:由抽象类 ...

  4. Day5 Numerical simulation of optical wave propagation之通过随机介质(如大气湍流)的传播(一)

    一 分步光束传播方法 到目前为止,人们已经设计出传播算法,用于模拟通过真空和通过可用光线矩阵描述的简单光学系统的传播. 其中分步光束传播方法除了描述上述传播过程,还有更复杂的应用,包括:部分时间和空间 ...

  5. ORM框架SQLAlchemy

    SQLAlchemy orm英文全称object relational mapping,就是对象映射关系程序,简单来说就是类似python这种面向对象的程序来说一切皆对象,但是使用的数据库却都是关系型 ...

  6. java的List列表转成Tree(树形)结构列表

    直接看借鉴博客:https://blog.csdn.net/massivestars/article/details/53911620/ 由于我的业务没有父子级id两个字段,只有一个层级id字段来分层 ...

  7. OOM分析工具

    OOM (OutOfMemoryError) 1.MAT工具 在eclipse中安装.Help>Eclipse Marketplace 搜索MAT 接下来运行程序,run configratio ...

  8. JSON.stringify()的不常见用法

    1.JSON.stringify()只序列化可遍历属性(enumerable=true) var obj = {}; Object.defineProperties(obj, { 'foo': { v ...

  9. springboot- logback 可切换不同环境

    在resources下新建一个logback文件夹和一个logback.xml logback.xml <?xml version="1.0" encoding=" ...

  10. Fixing “Did you mean to run dotnet SDK commands?” error when running dotnet –version

    I recently installed the dotnet 1.11.0 Windows Server Hosting package which apparently installs the ...