头一次接触到django-pure-pagination这个第三方库,真的带来了巨大的方便,阅读Github教程学习过后,让自己少写了很多代码,谨此写篇博客加深印象,欢迎大家观看学习一起进步。
django-pure-pagination的强大之处就在于能够提供高级分页功能,并于基于Django核心分页模块的现有代码完全兼容(也就是说不需要为了使用这个库而重写分页代码!)
本文参考GitHub:https://github.com/jamespacileo/django-pure-pagination
描述
作者: | James Pacileo |
---|---|
版本: | django-pure-pagination-0.3.0 |
描述: | django-pure-pagination提供高级分页功能,并与基于Django核心分页模块的现有代码完全兼容。(也就是说不需要重写代码!) |
要求: | Django 1.7+ |
介绍
-
django应用程序提供高级分页功能,无需在现有项目中强制更改代码。
-
Django-pure-pagination基于Django的核心分页模块,因此与现有的api兼容。
特征
1.使用与django.core.pagination相同的API ,因此与现有代码完全兼容。
2.具有动态查询字符串创建,它考虑了现有的GET参数。
3.分页的开箱即用的html呈现
4.其他方法可以更轻松地呈现更高级的分页模板。
安装
从PYPI安装包:
pip install django-pure-pagination
将pure_pagination添加到settings.py文件中的 INSTALLED_APPS
INSTALLED_APPS =(
...
'pure_pagination',
)
设置
可以在settings.py中设置一些设置(下面代码为默认设置,根据需求自己定制。)
PAGINATION_SETTINGS = {
'PAGE_RANGE_DISPLAYED':10,
'MARGIN_PAGES_DISPLAYED':2,
'SHOW_FIRST_PAGE_WHEN_INVALID':True,
}
PAGE_RANGE_DISPLAYED是将显示的当前页面附近的页面数(默认为10)
MARGIN_PAGES_DISPLAYED是将显示的第一页和最后一页相邻的页数(默认为2)
如果要在提供无效页面时显示第一页而不是404错误,请将SHOW_FIRST_PAGE_WHEN_INVALID设置为True
用法实例
视图文件:views.py
from django.shortcuts import render_to_response
from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
def index(request):
try:
page = request.GET.get('page', 1)
except PageNotAnInteger:
page = 1
# 为Paginator提供完整查询字符串生成的请求对象
p = Paginator(all_orgs,5,request=request) # all_orgs是数据库中查询出来的queryset对象
orgs = p.page(page) # orgs即为生成的请求对象
return render(request,'org-list.html',{
'orgs':orgs,
})
模板文件:org-list.html
{% extends 'base.html' %}
{% block content %}
<!-- 重要提示:如果模板中for循环要使用到传递进来的orgs变量,必须要在后面加上 .object_list 示例如下-->
{% for org in orgs.object_list %}
<div>
名字:{{org.name}}
</div>
{% endfor %}
<!-- 如果使用django-pure-pagination自带的分页功能的话,直接使用一下示例,直接在模板中生成对应的html代码和css样式-->
<!-- 呈现分页的最简单方法是调用render方法,即{{page.render}} -->
<div id =“pagination”>
{{org.render}}
</div>
{% endblock %}
效果图:
大体一看,博主也是吓了一跳,真的真的是太丑了吧,真心不想用自带的html样式组合。。。不过大家千万不要走开,开始展现真正的技术了!!! 开始的时候就说了使用这个框架,无需再写多余的分页代码。只需要在自己分页的代码的基础上加一些判断逻辑,就可以实现此强大的分页功能
以下是提前写好的html分页代码:
<div class="pageturn">
<ul class="pagelist">
<li class="active"><a href="?page=1">1</a></li>
<li><a href="?page=2" class="page">2</a></li>
<li><a href="?page=3" class="page">3</a></li>
<li class="long"><a href="?page=2">下一页</a></li>
</ul>
</div>
根据django-pure-pagination的规则进行配置:(在以上html代码基础上进行语法修改)
<div class="pageturn">
<ul class="pagelist">
{% if orgs.has_previous %}
<li class="long"><a href="?{{ orgs.previous_page_number.querystring }}">上一页</a></li>
{% endif %}
{% for page in orgs.pages %}
{% if page %}
{% ifequal page orgs.number %}
<li class="active"><a href="?{{ page.querystring }}">{{ page }}</a></li>
{% else %}
<li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>
{% endifequal %}
{% else %}
<li class="none"><a href="">...</a></li>
{% endif %}
{% endfor %}
{% if orgs.has_next %}
<li class="long"><a href="?{{ orgs.next_page_number.querystring }}">下一页</a></li>
{% endif %}
</ul>
</div>
效果图展示:
到底就大功告成了,运用这个库只需要在已有的代码基础上,加一些判断逻辑就Ok了。
正好写完文章学校要断网了,洗漱睡觉? 各位晚安。。。
2019-03-29