【问题标题】:How to do paging/pagination in Django for 3rd party REST services如何在 Django 中为 3rd 方 REST 服务进行分页/分页
【发布时间】:2011-07-16 10:31:09
【问题描述】:

以 flickr 为例,请求 URL 如下所示:

'http://api.flickr.com/services/rest/?&method=flickr.people.getPublicPhotos&api_key=' + settings.FLICKR_API_KEY + '&user_id=' + userid + '&format=json&per_page' + per_page + '&page=' + page + '&nojsoncallback=1'

page 控制显示哪个页面,per_page 控制返回的照片数量

为了简化问题,让我们将per_page 固定。所以我的问题是,我怎样才能实现一个分页系统,允许用户在网页上随时向前或向后一页?

我想我需要传递页码来遍历请求 URL,以便显示正确的数据。所以我想我不确定如何将模板绑定到views.py。本质上,我正在寻找这个Rails question 的Django 版本。

到目前为止我遇到的示例和插件(例如 django-pagination)主要处理由数据库查询产生的分页。

【问题讨论】:

    标签: python django api rest pagination


    【解决方案1】:

    Django-pagination 可以处理任何对象列表——不仅仅是来自数据库的调用。 here 的例子实际上是从一个与本地模型或数据库无关的例子开始的。

    对于 API 类型的调用,您只需将对象读入列表,然后根据该列表创建一个新的 Paginator 对象。您所要做的就是给它每页所需的对象数量。真的很简单。

    【讨论】:

    • 对不起,我还是不太清楚该怎么做。问题是,为了将对象读入列表,我需要将页码传递给它。我如何首先自动生成此页码?
    • @Nai:读取所有的对象。然后让 Django 的分页器为您完成剩下的工作。请阅读代码示例。它适用于 any 列表。因此,请从您的其他服务中获取 所有 项。 Django 页码信息在相关链接中有完整描述。
    • @S.Lott 所以假设有 1000 张图片,我必须先下载所有 1000 张图片才能获得最终计数,以便计算由此产生的页面数?这是最好的方法吗?我不能即时提出请求吗?
    • @Nai:“我必须先下载全部 1000 个才能获得最终计数,这样我才能计算由此产生的页面数?”。不,你需要一份清单。下载所有这些是获取列表的一种简单方法。另一种是编写生成器函数。从下载所有内容开始,以便您可以使用 something。稍后,您可以对其进行修改。
    【解决方案2】:

    根据您的描述,我会说从 page = 1 开始。如果 page = 1,则在您的页面中有一个链接可以前进,这将加载 page = 2。如果您在除一个之外的任何其他页面中,则生成两个链接,一个用于上一页,另一个用于下一页,相对于当前链接。

    如果您想要更好的帮助,您真的必须向我们展示一些代码。

    【讨论】:

    • 什么样的代码 sn-ps 在这种情况下会有帮助?我不知道提供我的 views.py 或我的模板文件会有用吗?
    猜你喜欢
    • 2018-11-24
    • 2014-08-28
    • 1970-01-01
    • 2020-09-29
    • 2016-12-23
    • 1970-01-01
    • 2015-05-18
    • 2021-07-12
    相关资源
    最近更新 更多