经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
Django实现分页显示效果
来源:jb51  时间:2019/11/1 8:32:55  对本文有异议

Django中提供了一个类Paginator专门用来管理和处理分页数据,所以我们在使用之前先导入好相应的类,,另外这里我们也导入了待会会用到的处理异常的两个类 EmptyPage和PageNotAnInteger:

  1. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

接着编写好视图函数test:

  1. def test(request):
  2. course_list=CourseVideo.objects.all()
  3. #生成pagintor对象,定义每页显示10条记录
  4. paginator=Paginator(course_list,10)
  5.  
  6. #获取当前的页码数,默认为1
  7. page=request.GET.get("page",1)
  8.  
  9. #把当前的页码数转换为整数类型
  10. currentPage=int(page)
  11.  
  12. try:
  13. video_list=paginator.page(page)#获取当前页码的记录
  14. except PageNotAnInteger:
  15. video_list=paginator.page(1)#如果用户输入的页码不是整数时,显示第1页的内容
  16. except EmptyPage:
  17. video_list=paginator.page(paginator.num_pages)#如果用户输入的页码不是整数时,显示第1页的内容
  18. return render(request, "test.html", locals())

接下来我们完成前端页面的逻辑,这里定义的文件为test.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>这里的标题</title>
  6. </head>
  7. <body>
  8. <div class="manageContent">
  9. {#数据显示div--start#}
  10. {% for video in video_list%}
  11. <div id="{{ video.vidoeContentId }}" class="content9">
  12.  
  13. <div class="videomsg">
  14. <img src="/static/images/favicon.ico" alt="" />
  15. <span >{{ video.name }}</span>
  16. </div>
  17. <span class="courseTime" >{{ video.number }}</span>
  18. <span class="sourse" >{{ video.source }}</span>
  19. <span class="status" >{{ video.status }}</span>
  20. <div class="operate">
  21. <span style="cursor:pointer;" onclick="ShowUpDiv('upfileDiv','fade1','{{ video.id }}','{{ video.name }}')">上传</span>
  22. <span style="cursor:pointer;" onclick="ShowEditDiv('editDiv','editfade','{{ video.name }}','{{ video.number }}','{{ video.source }}','{{ video.status }}','{{ video.id }}')" >修改</span>
  23. <span style="cursor:pointer;" onclick="Showdetail('{{ video.id }}')" >详情</span>
  24. </div>
  25.  
  26. <div id="{{ video.id }}" style="display: none ;overflow:scroll;overflow-x:hidden">
  27.  
  28. </div>
  29.  
  30. </div>
  31. {% endfor %}
  32. {#数据显示div--end#}
  33. {#显示分页导航栏--start#}
  34. <div class="kkk">
  35. <ul class="pagination" id="pager" >
  36. {#上一页按钮开始#}
  37. {# 如果当前页有上一页#}
  38. {% if video_list.has_previous %}
  39. {# 当前页的上一页按钮正常使用#}
  40. <li class="previous"><a href="/backstage/test/?page={{ video_list.previous_page_number }}" >上一页</a></li>
  41. {% else %}
  42. {# 当前页的不存在上一页时,上一页的按钮不可用#}
  43. <li class="previous disabled"><a href="#" >上一页</a></li>
  44. {% endif %}
  45. {#上一页按钮结束#}
  46.  
  47. {# 页码开始#}
  48. {% for num in paginator.page_range %}
  49. {% if num == currentPage %}
  50. <li class="liactive"><a class="selected" href="/backstage/test/?page={{ num }}" >{{ num }}</a></li>
  51. {% else %}
  52. <li class="itemli"><a href="/backstage/test/?page={{ num }}" >{{ num }}</a></li>
  53. {% endif %}
  54. {% endfor %}
  55. {#页码结束#}
  56.  
  57. {# 下一页按钮开始#}
  58. {% if video_list.has_next %}
  59. <li class="next"><a href="/backstage/test/?page={{ video_list.next_page_number }}" >下一页</a></li>
  60. {% else %}
  61. <li class="next disabled"><a href="#" >下一页</a></li>
  62. {% endif %}
  63. {# 下一页按钮结束#}
  64. </ul>
  65. </div>
  66. {#显示分页导航栏--end#}
  67.  
  68. </div>
  69.  
  70. </body>
  71. </html>

至此,分页显示的逻辑完成,更多关于Paginator的语法实例如下:

  1. from django.core.paginator import Paginator
  2. objects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain']<br>
  3. p = Paginator(objects,3) # 3条数据为一页,实例化分页对象
  4. print p.count # 10 对象总共10个元素
  5. print p.num_pages # 4 对象可分4页
  6. print p.page_range # xrange(1, 5) 对象页的可迭代范围
  7. page1 = p.page(1) # 取对象的第一分页对象
  8. print page1.object_list # 第一分页对象的元素列表['john', 'paul', 'george']
  9. print page1.number # 第一分页对象的当前页值 1
  10. page2 = p.page(2) # 取对象的第二分页对象
  11. print page2.object_list # 第二分页对象的元素列表 ['ringo', 'lucy', 'meiry']
  12. print page2.number # 第二分页对象的当前页码值 2
  13. print page1.has_previous() # 第一分页对象是否有前一页 False
  14. print page1.has_other_pages() # 第一分页对象是否有其它页 True
  15. print page2.has_previous() # 第二分页对象是否有前一页 True
  16. print page2.has_next() # 第二分页对象是否有下一页 True
  17. print page2.next_page_number() # 第二分页对象下一页码的值 3
  18. print page2.previous_page_number() # 第二分页对象的上一页码值 1
  19. print page2.start_index() # 第二分页对象的元素开始索引 4
  20. print page2.end_index() # 第2分页对象的元素结束索引 6

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号