Django分页功能的设计

头一次接触到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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值