前言

Django全家桶自带的分页组件只能说能满足分页这个功能,但是没那么好用就是了

Django的分页效果

django-pure-pagination分页效果

使用方法

首先安装:

pip install django-pure-pagination

添加到App

INSTALLED_APPS = (
...
'pure_pagination',
)

配置一下,配置说明如图

PAGINATION_SETTINGS = {
'PAGE_RANGE_DISPLAYED': 10,
'MARGIN_PAGES_DISPLAYED': 2, 'SHOW_FIRST_PAGE_WHEN_INVALID': True,
}

视图代码例子

from django.shortcuts import render
from pure_pagination import Paginator
from .models import Video def all_video(request):
video_list = Video.objects.all()
paginator_obj = Paginator(video_list, 10, request=request) ctx = {
'page': paginator_obj.page(request.GET.get('page', 1)),
} return render(request, 'video_list.html', context=ctx)

模板代码

注意这个django-pure-paginationPaginator对象和Django内置的Paginator有点不同,在用法上不同。

Django内置的Paginator本身就是迭代器了,直接for item in page就行,但是django-pure-pagination不同,得for item in page.object_list,这个区别注意一哈~

因此,django-pure-pagination需要这样遍历页面内的对象:

{% for video in page.object_list %}
{% include "widgets/video_card.html" %}
{% empty %}
<div class="alert alert-secondary" role="alert">
视频列表获取为空!
</div>
{% endfor %}

分页器的HTML代码

这里最好是单独写一个paginator.html,作为Django模板组件,然后其他页面可以很方便的使用{% includ "paginator.html" %}引入

{% load i18n %}

{% if page.paginator.num_pages > 1 %}
<nav aria-label="Page navigation example">
<ul class="pagination justify-content-center">
{% if page.has_previous %}
<li class="page-item">
<a class="page-link" href="?{{ page.previous_page_number.querystring }}">&lsaquo;&lsaquo; {% trans "previous" %}</a>
</li>
{% else %}
<li class="page-item disabled">
<span class="page-link">&lsaquo;&lsaquo; {% trans "previous" %}</span>
</li>
{% endif %} {% for p in page.pages %}
{% if p %}
{% ifequal p page.number %}
<li class="page-item active">
<span class="page-link">{{ p }}</span>
</li>
{% else %}
<li class="page-item">
<a class="page-link" href="?{{ p.querystring }}">{{ p }}</a>
</li>
{% endifequal %}
{% else %}
<li class="page-item disabled">
<span class="page-link">...</span>
</li>
{% endif %}
{% endfor %} {% if page.has_next %}
<li class="page-item">
<a href="?{{ page.next_page_number.querystring }}" class="page-link">{% trans "next" %} &rsaquo;&rsaquo;</a>
</li>
{% else %}
<li class="page-item disabled">
<span class="page-link disabled">{% trans "next" %} &rsaquo;&rsaquo;</span>
</li>
{% endif %}
</ul>
</nav>
{% endif %}

最终实现的效果

参考资料

欢迎交流

程序设计实验室专注于互联网热门新技术探索与团队敏捷开发实践,在公众号「程序设计实验室」后台回复 linux、flutter、c#、netcore、android、kotlin、java、python 等可获取相关技术文章和资料,同时有任何问题都可以在公众号后台留言~

最新文章

  1. android Fragments介绍
  2. supportRequestWindowFeature与requestWindowFeature
  3. 用HTML5 CANVAS做自定义路径的动态效果图片!
  4. noip2015 运输计划
  5. c#缓存 笔记
  6. [素材资源] Android开发性能优化简介(非常不错的)
  7. struts2标签整理
  8. JAVA插入数据到MySql少了8小时
  9. linux下的共享库(动态库)和静态库
  10. Could not fetch https://api.github.com/repos/RobinHerbots/jquery
  11. codevs 2241 排序二叉树
  12. 搞个这样的APP要多久? (转)
  13. libPods.a 无法找到的解决方法
  14. linux git升级到1.8.3
  15. windows 上优雅的安装 node 和 npm
  16. javac编译乱码
  17. springboot入门_模板
  18. netcore项目在Windows部署:使用NSSM部署Windows服务
  19. 3. ORACLE DATAGUARD 进程
  20. Apache Atlas

热门文章

  1. vue &amp; less bug
  2. GitHub SSH key
  3. React useMemo
  4. input change only trigger once bug
  5. ng 设置动态的document title
  6. Flutter 避免阻塞ui线程
  7. PAA房产智慧社区:解决社区管理服务的痛点难点
  8. JDK源码阅读-FileInputStream
  9. 1063 Set Similarity——PAT甲级
  10. list 打乱排序