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

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

  1. def books(request):
  2.  
  3. try: #防止用户直接输入非数字
  4. page = int(request.GET.get("page")) #第几页
  5. except:
  6. page = 1
  7.  
  8. total_num = Books.objects.all().count() #一共多少条数据
  9. per_page = 10 #每页多少条数据
  10. total_page,m = divmod(total_num,per_page) #一共多少页
  11. if m:
  12. total_page+=1
  13. if page>total_page:
  14. page = total_page
  15.  
  16. start_page = (page-1)*10 #每页从那开始
  17. end_page = page*10 #每页从哪结束
  18.  
  19. books = Books.objects.all()[start_page:end_page]
  20.  
  21. show_pages = 5 #显示多少个页码
  22. half_show_pages = show_pages//2
  23. if page < 1+half_show_pages:
  24. show_start_page = 1
  25. show_end_page = show_pages
  26. elif page > total_page-half_show_pages:
  27. show_start_page = total_page-half_show_pages*2
  28. show_end_page = total_page
  29. else:
  30. show_start_page = page - half_show_pages
  31. show_end_page = page + half_show_pages
  32.  
  33. page_list = []
  34. for i in range(show_start_page,show_end_page+1):
  35. if i==page:
  36. temp = '<li class="active"><a href="/books/?page={0}">{0}</a></li>'.format(i)
  37. else:
  38. temp = '<li><a href="/books/?page={0}">{0}</a></li>'.format(i)
  39. page_list.append(temp)
  40.  
  41. pre_page = page-1
  42. next_page = page+1
  43. return render(request,"books.html",locals())
  1. <div class="box">
  2. <table class="table">
  3. <thead>
  4. <tr>
  5. <th>序号</th>
  6. <th>书名</th>
  7. </tr>
  8. </thead>
  9. <tbody>
  10. {% for item in books %}
  11. <tr>
  12. <td>{{ item.id }}</td>
  13. <td>{{ item.name }}</td>
  14. </tr>
  15. {% endfor %}
  16. </tbody>
  17. </table>
  18.  
  19. <nav aria-label="Page navigation">
  20. <ul class="pagination">
  21. <li>
  22. {% if page == 1 %}
  23. <a href="#" aria-label="Previous">
  24. <span aria-hidden="true">&laquo;</span>
  25. </a>
  26. {% else %}
  27. <a href="?page={{ pre_page }}" aria-label="Previous">
  28. <span aria-hidden="true">&laquo;</span>
  29. </a>
  30. {% endif %}
  31. </li>
  32.  
  33. <li><a href="/books/?page=1">首页</a></li>
  34.  
  35. {% for item in page_list %}
  36. {{ item|safe }}
  37. {% endfor %}
  38.  
  39. <li><a href="?page={{ total_page }}">尾页</a></li>
  40.  
  41. <li>
  42. {% if page == total_page %}
  43. <a href="#" aria-label="Previous">
  44. <span aria-hidden="true">&laquo;</span>
  45. </a>
  46. {% else %}
  47. <a href="?page={{ next_page }}" aria-label="Previous">
  48. <span aria-hidden="true">&raquo;</span>
  49. </a>
  50. {% endif %}
  51. </li>
  52. </ul>
  53. </nav>
  54. </div>
  55.  
  56. <script src="/static/jquery.js"></script>
  57. <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. cumprod、prod函数

    1.prod函数 prod函数用于求矩阵元素的积,其调用格式如下. (1)B=prod(A):若A为向量,则返回所有元素的积:若A为矩阵,则返回各列所有元素的积. (2)B=prod(A,dim):返 ...

  2. 0.[Andriod]之从零安装配置Android Studio并编写第一个Android App

    0. 所需的安装文件 笔者做了几年WP,近来对Android有点兴趣,尝试一下Android开发,废话不多说,直接进入主题,先安装开发环境,笔者的系统环境为windows8.1&x64. 安装 ...

  3. 性能测试监控平台:InfluxDB+Grafana+Jmeter

    前面的博客介绍了InfluxDB.Telegraf.Grafana的安装和使用方法,这篇博客,介绍下如何利用这些开源工具搭建性能测试监控平台... 前言 性能测试工具jmeter自带的监视器对性能测试 ...

  4. SQL SERVER数据库修改是否区分大小写(转载)

    昨天去客户,发现程序无法应用,跟踪错误提示,提示的大致意思是“数据库表名和数据库字段名不存在”.查询后发现是SQL Server数据库设置了区分大小写的缘故(一般安装时,Oracle的正确安装下是默认 ...

  5. Python--day02(编程语言、运行python代码、变量)

    day01主要内容回顾 1.进制转换: 二进制: 1111  0101 1010 十六进制          f        5      a 2.内存分布:堆区 和 栈区 外来人只能访问栈区的数据 ...

  6. 树的平衡之AVL树——错过文末你会后悔,信我

    学习数据结构应该是一个循序渐进的过程: 当我们学习数组时,我们要体会数组的优点:仅仅通过下标就可以访问我们要找的元素(便于查找). 此时,我们思考:假如我要在第一个元素前插入一个新元素?采用数组需要挪 ...

  7. PS调出米黄色复古柔和外景人物照

    配色思路 从片中可以看出主要景物近处的有人物和栏杆,远处的海水,天空和礁石.为体现出远近层次,近处景物选择了偏黄的色调,远处景物选择了偏青色调. 调色 以下面这张照片为例,先放上对比图: LR部分 首 ...

  8. Jmeter录制手机app脚本

    转:http://www.cnblogs.com/yangxia-test/p/5484616.html   环境准备: 1.手机 2.wifi 3.Jmeter   具体步骤: 1.启动Jmeter ...

  9. [转帖]内置系统账户:Local system/Network service/Local Service 区别

    内置系统账户:Local system/Network service/Local Service 区别 学习使用 xp_cmdshell 的时候 发现必须 sqlserver 的服务运行在local ...

  10. Python进阶4---Python的文件IO

     文件操作 体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE).只不过因为RAM是其中最重要的存储器. 通常所说的内存即指电脑系统中的RAM.RAM要求每时每刻都不 ...