跳转到主要内容

为django提供的关键集分页(查找方法)。

项目描述

为Django提供的关键集分页。

Django分页使用LIMIT/OFFSET方法。这在较小的偏移量时效果不错,但一旦开始超过几页,性能可能会非常糟糕。这是因为数据库需要获取所有之前的行,即使它最终会丢弃它们。

使用关键集分页可以使“下一页”获取性能更佳,但代价是不能随机获取页面。也就是说,如果你知道前一页N-1的最后元素,那么你可以获取第N页,否则你实际上做不到。

关键集分页,有时也称为查找方法,由Markus WinandJoe Nelson进行了记录。如果你不熟悉这个概念,我强烈建议你阅读上述文章。

为了使用此包中的分页器,你可能还需要使用提供的视图混合:这改变了查询集分页的方式,以启用非整数的“页面号”。

class List(PaginationMixin, ListView):
    paginator_class = KeysetPaginator
    paginate_by = 10
    queryset = MyModel.objects.order_by('-timestamp', 'group')

你无法像在模板中迭代页面号那样迭代:你只能限制在下一页和上一页之间。否则,你将主要以相同的方式构建它们。

<a href="{% url 'mymodel:list' %}?page={{ page_obj.previous_page_number }}">
  Prev Page
</a>

<a href="{% url 'mymodel:list' %}?page={{ page_obj.next_page_number }}">
  Next Page
</a>

请注意,您无法访问查询集的长度或页数,因为这些查询可能很昂贵。您实际上并不需要知道这些 ;)

然而,我喜欢使用GET表单来 启用筛选结果的分页

<button form="target-form"
        name="page"
        value="{{ page_obj.previous_page_number }}"
        type="submit">
  &larr; Prev Page
</button>

<button form="target-form"
        name="page"
        value="{{ page_obj.next_page_number }}"
        type="submit">
  Next Page &rarr;
<button>

有关此包工作方式的更多详细信息,请参阅 https://schinckel.net/2018/11/23/keyset-pagination-in-django/

项目详情


下载文件

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

源分布

由支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面