django的键集分页(seek方法)。

django-keyset-pagination-plus的Python项目详细描述


django的键集分页。

django分页使用limit/offset方法。对于较小的偏移来说,这是很好的,但是一旦你开始超过几页,它就会表现得非常糟糕。这是因为数据库需要获取前面的所有行,即使它丢弃了它们。

使用键集分页可以更好地执行“下一页”提取,但代价是无法随机提取页。也就是说,如果您知道第n-1页中的最后一个元素,那么您可以获取第n页,但如果不知道,您确实无法获取。

键集分页(有时称为seek方法)已由Markus WinandJoe Nelson记录。如果你不熟悉这个概念,我强烈建议你阅读以上文章。

为了在这个包中使用PypInter,您可能还需要使用提供的视图MIXIN:这改变了QueReSub被分页的方式来启用非整数的“页码”。

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>

请注意,您无法访问queryset的长度和页数,因为这些查询可能很昂贵。你真的不需要知道;)

但是,我喜欢使用get forms来enable pagination of filtered results

<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/以了解有关此包如何工作的更多详细信息。

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

推荐PyPI第三方库


热门话题
java需要设置框架。可设置大小(false)以重新绘制()   java我对PDF文件感到困惑   为什么是太阳。jvm。热点。调试器。DebuggerException:无法打开二进制文件`?   设置结果为textview时出现java空指针异常   我应该使用什么同步原语在Java中实现事件驱动程序框架?   java为什么WindowClosing处理程序在退出程序之前不执行后台任务?   如何将“20170712T18:43:04.000Z”转换为安卓或java中的相对时间?   Java,获取按键的时间长度,currentTimeMillies()始终为24   maven构建的java可执行Jar找不到logback。xml   java在其外部的函数中使用for循环中的值   java如何以表格格式将不同长度的数据对齐   java Play 2.5 WebSocket连接构建   maven而非eclipse的java强制转换问题   java如何在JFreeChart中使X轴上的值水平?   构建Java Windows应用程序以访问在线MySQL数据库需要什么   java添加构造函数会出错吗?这没有道理,请帮忙,编程问题   java在一个jframe中的两个JPanel中使用两个绘制方法   java数学或逻辑问题   java如何复制Androids库存摄像头方向更改