paginate_orphans()
函数是Django分页功能中的一个参数,其作用是指定分页时允许放置在最后一个页面的单独页面数。
在Django中使用分页可能会出现最后一页仅有1~2个数据的情况,而这会对用户产生不良体验。因此,paginate_orphans()
函数就能够在尽量将数据合理分配到各页的前提下,规定最后一页的数据数量不低于指定值,以增加用户体验。
paginate_orphans()
函数的使用方法非常简单。只需在分页模板中作为模板标签传入一个整数值作为参数即可。例如:
{% if page_obj.has_other_pages %}
<ul class="pagination">
{% if page_obj.previous_page_number %}
<li><a href="?page=1">«</a></li>
<li><a href="?page={{ page_obj.previous_page_number }}"><</a></li>
{% endif %}
{% for num in page_obj.paginator.page_range %}
{% if page_obj.number == num %}
<li class="active"><a href="#">{{ num }}</a></li>
{% elif num > page_obj.number|add:'-3' and num <
page_obj.number|add:'3' %}
<li><a href="?page={{ num }}">{{ num }}</a></li>
{% endif %}
{% endfor %}
{% if page_obj.next_page_number %}
<li><a href="?page={{ page_obj.next_page_number }}">></a></li>
<li><a href="?page={{ page_obj.paginator.num_pages }}">»</a></li>
{% endif %}
</ul>
{% endif %}
{% if is_paginated %}
<div class="pagination">
<span class="total-pages">Page {{ page_obj.number }} of {{
paginator.num_pages }}.</span>
{% if page_obj.has_previous %}
<a class="button" href="?page={{ page_obj.previous_page_number }}
{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">Previous</a>
{% endif %}
{% if page_obj.has_next %}
<a class="button" href="?page={{ page_obj.next_page_number }}
{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">Next</a>
{% endif %}
</div>
{% endif %}
以上是一段使用Django分页模板的样例,其中的paginate_orphans()
函数可以在传参时限定最后一页的物品数。
下面来举两个具体的例子,说明使用paginate_orphans()
函数的效果:
假设你有一篇博客,下方需要展示50篇相关文章,且每页展示10篇文章。未使用paginate_orphans()
函数时,最后一页仅展示了5篇文章,最后一页单独存在,影响了浏览体验。如果设置paginate_orphans(2)
,即每页至少展示12篇文章时,最后一页面就会展示有6篇文章,而不是只有5篇。这样,数据样式将服务于更好的用户体验。
再例如,你有一个电商网站,产品页需要100个商品进行展示。同样设定每页展示10件商品,如果未设置paginate_orphans()
函数,最后一页仅展示了10件商品。而如果设置paginate_orphans(2)
,则最后一页将至少有12件商品逐一展示。不论最后一页数据量多少,使用了paginate_orphans()
都可以使得用户浏览数据时视觉效果更加合理。