跳转到主要内容

为API设计的分页计算器

项目描述

Build Status

为API设计的分页计算器

在构建API时,应该用空结果集来处理越界页面。现有的解决方案并没有这样做。我们从API的角度设计了api-pagination来处理这些边缘情况。

入门

使用以下命令安装模块:pip install api_pagination

# Load in dependencies
from api_pagination import Paginator

# Generate a paginator and get info about a page
paginator = Paginator(total=100, items_per_page=10)
page_info = paginator.get_page_info(page=2)
{
    'overall': {
        'first_page': 1,
        'last_page': 10,
        'pages': 10,
        'total': 100
    },
    'page': {
        'current_page': 2,
        'next_page': 3,
        'previous_page': 1
    }
}

# Use a classmethod to get info in one fell swoop
page_info = Paginator.page_info(page=1, total=100, items_per_page=10)
{
    'overall': {
        'first_page': 1,
        'last_page': 10,
        'pages': 10,
        'total': 100
    },
    'page': {
        'current_page': 1,
        'next_page': 2,
        'previous_page': None
    }
}

# Handle out of bounds properly
page_info = Paginator.page_info(page=20, total=100, items_per_page=10)
{
    'overall': {
        'first_page': 1,
        'last_page': 10,
        'pages': 10,
        'total': 100
    },
    'page': {
        'current_page': 20,
        'next_page': None,
        'previous_page': 10
    }
}

文档

我们通过我们的包api_pagination公开了Paginator

Paginator(total, items_per_page)

计算项目分页信息的类

  • total int - 总项目数量

  • items_per_page int - 每页包含的项目数量

paginator.get_page_info(page)

收集关于给定页面的信息

  • page int - 基于人类的页面索引

    • 例如,第1页将是第1-10项(其中items_per_page=10

返回

  • ret_val dict - 包含整体信息和页面特定信息的容器

    • overall dict - 包含整体信息的容器

      • first_page int - 第一个页面的基于人类的索引

        • 例如,当 total=20items_per_page=10 时,我们得到 first_page=1

      • last_page int - 最后页面的基于人的索引

        • 例如,当 total=25items_per_page=10 时,我们得到 last_page=3 (包括项目 21-25)

      • pages int - 总页数

        • 例如,当 total=25items_per_page=10 时,我们得到 pages=3

      • total int - 总项目数

    • page dict - 页面特定信息的容器

      • current_page int - 请求页面的基于人的索引

      • next_page int|None - 如果此页面之后还有其他页面,next_page 将是该页面的基于人的索引

        • 例如,当 total=25items_per_page=10,和 page=2 时,我们得到 next_page=3 (包括项目 21-25)

        • 当处于最后一页(例如 total=25items_per_page=10page=3)时,next_page 将为 None

        • 如果我们低于范围(例如 page=-1),则 next_page 将是第一页(page=1

      • previous_page int|None - 如果此页面之前还有其他页面,previous_page 将是该页面的基于人的索引

        • 例如,当 total=25items_per_page=10,和 page=2 时,我们得到 previous_page=1 (包括项目 1-10)

        • 当处于第一页(例如 total=25items_per_page=10page=1)时,则 previous_page 将为 None

        • 如果我们超出范围(例如 total=25items_per_page=10page=4),则 previous_page 将是最后一页(page=3

Paginator.page_info(page, *args, **kwargs)

获取页面信息而不调用多个操作的辅助函数

  • page int - 要传递给 paginator.get_page_info 的页面

  • *args - 要传递给 Paginator 构造函数的有序参数

  • **kwargs - 要传递给 Paginator 构造函数的关键字参数

返回

返回与 paginator.get_page_info 相同的格式

示例

page_info = Paginator.page_info(page=1, total=100, items_per_page=10)
# Same as
# paginator = Paginator(total=100, items_per_page=10)
# page_info = paginator.get_page_info(page=1)

贡献

在没有正式风格指南的情况下,请注意维护现有的编码风格。为任何新的或更改的功能添加单元测试。通过 ./test.sh 进行测试。

许可证

版权(c)2015 Underdog.io

在 MIT 许可下授权。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源代码分布

api_pagination-1.0.0.zip (15.4 kB 查看散列)

上传时间

api_pagination-1.0.0.tar.gz (7.7 kB 查看哈希值)

上传时间: 源代码

支持者