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第三方库


热门话题
在安卓 studio中使用docx4j时java崩溃应用程序   无法对Java/Netbeans中的REST API发出POST请求   java使用criteriabuilder构建带有treat的类型安全选择   java如何在工具栏窗格中显示可单击的链接   java更改节点的值   java DownloadManager在再次连接到internet时进行多次相同的下载   java错误消息传递二进制XML文件行#0:错误膨胀类   java使用PostgreSQL获取索引值   java使用POST方法Spring Boot中的JDBCTemplate存储对象数组   使用ContentVersionStrategy的java Spring引导缓存禁止使用gzip进行资源压缩   java将纬度和经度值设置为文本框   java CertificateException:不存在主题替代名称   java为什么Spring密钥生成器不考虑Spring缓存机制中的方法名称   (MongoDB Java)$推入阵列   java JYAML:序列化/反序列化嵌套/内部类   java为什么JPanel从不调用reapint   JavaSLF4J+logback+JBoss7?