django纯分页提供了高级分页功能,并且与基于django核心分页模块的现有代码完全兼容。(又名不需要重写代码!)

django-pure-pagination的Python项目详细描述


https://travis-ci.org/hovel/django-pure-pagination.svg?branch=master

说明

Author:James Pacileo @ignighted
Version:0.3.0
Description:django-pure-pagination provides advanced pagination features and is fully compatible with existing code based on Django’s core pagination module. (aka no need to rewrite code!)
Requirements:Django 1.7+
Contributors:juandecarrion (Juande Carrion), twidi (Stéphane Angel), bebraw (Juho Vepsäläinen), lampslave (), GeyseR (Sergey Fursov), zeus (Pavel Zhukov)

简介

Django应用程序提供了高级分页功能,而不强制在现有项目中更改主要代码。

django纯分页是基于Django的核心分页模块,因此与现有API兼容。

Documentation for Django core pagination module

功能

    使用相同的API作为^ {STR 1 } $django.Cyr.PigItP<强>,因此与现有代码完全兼容。具有动态查询字符串创建,它考虑到现有的获取参数。
  1. 开箱即用HTML呈现分页
  2. 其他方法使呈现更高级的分页模板更容易。

安装

从pypi安装包:

pip install django-pure-pagination

或从存储库克隆并安装:

git clone git@github.com:jamespacileo/django-pure-pagination.git
cd django-pure-pagination
python setup.py install

将纯分页添加到已安装的应用程序中

INSTALLED_APPS = (
    ...
    'pure_pagination',
)

最后将django.core.paginator import paginator的替换为纯分页import paginator的

设置

可以在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)

设置show_first_page_when_invalid为true,以便在提供无效页时仅显示第一页,而不是404错误

http://i.imgur.com/LCqrt.gif

使用示例

下面是基于函数的视图的一个简单示例。有关基于类的通用视图,请参见下文。

查看文件:views.py

# 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

    objects = ['john', 'edward', 'josh', 'frank']

    # Provide Paginator with the request object for complete querystring generation

    p = Paginator(objects, request=request)

    people = p.page(page)

    return render_to_response('index.html', {
        'people': people,
    }

模板文件:index.html

{# index.html #}
{% extends 'base.html' %}

{% block content %}

{% for person in people.object_list %}
    <div>
        First name: {{ person }}
    </div>
{% endfor %}

{# The following renders the pagination html #}
<div id="pagination">
    {{ people.render }}
</div>

{% endblock %}

使用量

有几种不同的方法可以利用django pure pagination中引入的特性。

呈现分页的最简单方法是调用呈现方法,即{{page.render}

或者,您也可以自己访问页面对象低级方法

特别注意:页面对象当前页面都指向模板中的页面对象。

{% load i18n %}
<div class="pagination">
    {% if page_obj.has_previous %}
        <a href="?{{ page_obj.previous_page_number.querystring }}" class="prev">&lsaquo;&lsaquo; {% trans "previous" %}</a>
    {% else %}
        <span class="disabled prev">&lsaquo;&lsaquo; {% trans "previous" %}</span>
    {% endif %}
    {% for page in page_obj.pages %}
        {% if page %}
            {% ifequal page page_obj.number %}
                <span class="current page">{{ page }}</span>
            {% else %}
                <a href="?{{ page.querystring }}" class="page">{{ page }}</a>
            {% endifequal %}
        {% else %}
            ...
        {% endif %}
    {% endfor %}
    {% if page_obj.has_next %}
        <a href="?{{ page_obj.next_page_number.querystring }}" class="next">{% trans "next" %} &rsaquo;&rsaquo;</a>
    {% else %}
        <span class="disabled next">{% trans "next" %} &rsaquo;&rsaquo;</span>
    {% endif %}
</div>

基于类的通用视图

django基于类的视图的文档https://docs.djangoproject.com/en/dev/ref/class-based-views/

查看文件:

  • views.py

    # views.py
    from django.views.generic import ListView
    
    from pure_pagination.mixins import PaginationMixin
    
    from my_app.models import MyModel
    
    
    class MyModelListView(PaginationMixin, ListView):
        # Important, this tells the ListView class we are paginating
        paginate_by = 10
    
        # Replace it for your model or use the queryset attribute instead
        object = MyModel
    

模板文件:

请注意,基于django泛型的列表视图将在上下文中包含对象page_obj。有关https://docs.djangoproject.com/en/dev/ref/generic-views/#list-detail-generic-views的详细信息

  • _分页.html

    {% load i18n %}
    <div class="pagination">
        {% if page_obj.has_previous %}
            <a href="?{{ page_obj.previous_page_number.querystring }}" class="prev">&lsaquo;&lsaquo; {% trans "previous" %}</a>
        {% else %}
            <span class="disabled prev">&lsaquo;&lsaquo; {% trans "previous" %}</span>
        {% endif %}
        {% for page in page_obj.pages %}
            {% if page %}
                {% ifequal page page_obj.number %}
                    <span class="current page">{{ page }}</span>
                {% else %}
                    <a href="?{{ page.querystring }}" class="page">{{ page }}</a>
                {% endifequal %}
            {% else %}
                ...
            {% endif %}
        {% endfor %}
        {% if page_obj.has_next %}
            <a href="?{{ page_obj.next_page_number.querystring }}" class="next">{% trans "next" %} &rsaquo;&rsaquo;</a>
        {% else %}
            <span class="disabled next">{% trans "next" %} &rsaquo;&rsaquo;</span>
        {% endif %}
    </div>
    
  • my_app/myobject_list.html

    {# my_app/myobject_list.html #}
    {% extends 'base.html' %}
    
    {% block content %}
    
    {% for object in object_list %}
        <div>
            First name: {{ object.first_name }}
        </div>
    {% endfor %}
    
    {# The following renders the pagination html #}
    {% include "_pagination.html" %}
    
    {% endblock %}
    

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
serversocket Java服务器socket中断如何   java通过随机类和排序为数组生成数据   @Column length大于255个字符的java实体   java在使用NIO2 API时消除检查异常   java使用用户凭据通过Microsoft Graph API上的控制台应用程序发送电子邮件   java将2个ArrayList一个接一个地显示到jTextArea中,根据输入的数据多次显示   java无法使用导入的库。安卓工作室。谷歌云端点jar   spring boot Neo4j Apoc在java中获取结果摘要时的情况   转义特殊字符javajson   无法在java中使用OpenCV读取图像,涉及unicode路径   swing Document Listener java“无法实例化DocumentListener类型”   java Piglatin,难以理解如何移动“.”一串   java映射请求基于一个可观察对象中的每个元素,使用改进?   java在可扩展字符串中搜索时,如何忽略字符的大小写?   在包中分组类的java约定   python为Java应用程序创建Ubuntu指示小程序   java Camunda:如何通过processInstanceId获取所有已完成的任务