django的快速顺序对象分页
django-sequential-pagination的Python项目详细描述
django顺序分页
使用“下一步”按钮按顺序对已排序的django查询集分页。与django-el-pagination完全兼容(但不依赖于它)。
分页是按对象id(或任何其他给出严格线性顺序的字段集)而不是按页码执行的。它不生成?page=2、?page=3等链接,而是生成?from=11、?from=21等链接。这将带来以下好处:
- 分页工作得非常快,甚至在巨大的数据集上也是如此。例如,在postgres上,像?page=1000000这样的查询可能需要几秒钟(甚至几分钟)的“正常”分页。
- 当在顶部注入新数据并改变页面边界时(这对于ajax分页特别重要),它可以防止在下一页出现重复。
缺点是没有对任意页码的导航,也没有反向导航,它总是只指向“下一页”的链接(或者在最后一页什么也没有)。
安装
pip install django-sequential-pagination
用法
将django_sequential_pagination添加到INSTALLED_APPS:
# settings.pyINSTALLED_APPS=[...'django_sequential_pagination',]
将orderedqueryset传递给模板:
# views.pydefrecent_posts(request):returnrender(request,"blog/posts.html",{'posts':Post.objects.all().order_by('-time','-id'),})
请确保订单始终有一个领带断路器作为最后的关键,否则您可能会得到重复的页面边界。
现在,对模板中的对象分页:
{%loadpagination%}{%paginatepostsper_page=10aspage%}{%forpostinpage.objects%} <div>Post #{{post.id}}</div> {%endfor%}{%ifpage.next_page_url%} <a href="{{page.next_page_url}}">Next</a> {%endif%}
设置
您可以覆盖settings.py:
中的默认设置SEQUENTIAL_PAGINATION_PER_PAGE=20SEQUENTIAL_PAGINATION_KEY='from'# querystring key to use, as in ?from=XXXX
Django el分页
通过将其放入页面模板中,可以使用django-el-pagination启用无休止的分页:
{%paginatepostsper_page=10key='page'aspage%}{%forpostinpage.objects%} <div>Post #{{post.id}}</div> {%endfor%}{%ifpage.next_page_url%} <nav class="endless_container"> <ul class="pagination"><!-- Bootstrap v3 styles --> <li> <a class="endless_more" href="{{page.next_page_url}}" rel="{{page.key}}">Show more</a> </li> </ul> </nav> {%endif%} <script> $.endlessPaginate({paginateOnScroll: true}); </script>
确保分页key(或SEQUENTIAL_PAGINATION_KEY)与AjaxListView.key匹配。默认值不同(from和page)。
金贾2
如果安装了jinja2,django_sequential_pagination.templatetags.pagination将是一个jinja2.contextfunction。
此外,如果安装了django_jinja,它将自动注册为模板标记,因此您可以立即使用它:
{%setpage=paginate(posts,per_page=10)%}{%forpostinpage.objects%} <div>Post #{{post.id}}</div> {%endfor%}{%ifpage.next_page_url%} <a href="{{page.next_page_url}}">Next</a> {%endif%}