为django提供的关键集分页(查找方法)。
项目描述
为Django提供的关键集分页。
Django分页使用LIMIT/OFFSET方法。这在较小的偏移量时效果不错,但一旦开始超过几页,性能可能会非常糟糕。这是因为数据库需要获取所有之前的行,即使它最终会丢弃它们。
使用关键集分页可以使“下一页”获取性能更佳,但代价是不能随机获取页面。也就是说,如果你知道前一页N-1的最后元素,那么你可以获取第N页,否则你实际上做不到。
关键集分页,有时也称为查找方法,由Markus Winand和Joe 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">
← Prev Page
</button>
<button form="target-form"
name="page"
value="{{ page_obj.next_page_number }}"
type="submit">
Next Page →
<button>
有关此包工作方式的更多详细信息,请参阅 https://schinckel.net/2018/11/23/keyset-pagination-in-django/
项目详情
关闭
django-keyset-pagination-plus-0.9.10.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | e9a49400f18bfe6193067378bfddaf36daa408164548b433614a0428e942f52a |
|
MD5 | 875c927925cd00077215bd1354e675dd |
|
BLAKE2b-256 | baed87c3d8281af7dbd996bfc0d8b4e5928e9c2ca0b22998213457a11dc0813d |