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如何实时生成简单的2D图形?   java如何使用DirectoryStream过滤隐藏文件。滤器   二进制Java BigInteger测试位64位长   java Grails替换onetoone关联中的对象   爪哇七月至SLF4J大桥   java无法解决符号“窗口”错误   java在Mysql中保存NULL而不是HTML文档的文本   java当blackberry OS显示摄像头权限警报,用户点击通话结束(红色)按钮时,如何正确退出blackberry应用程序   二维地图平铺java上的块碰撞问题   java jpa mysql表不存在自动生成不工作   java在按下按钮或失去焦点时切换JDialog可见性   如何将java中的复杂映射序列化为JSON   JavaHadoop2。2.0追加文件发生AlreadyBeingCreatedException   字符串Java printDailyCost方法   feed如何修复java中新闻api的“太多请求”错误   基于字符串的java Android目录层次结构   如果键存在且值不为null,则java放入映射,否则抛出异常   java如何获取cglib代理类实例的字节码?   算法Java中按多个属性对对象进行分组的一般方法