django-分页
一 创建分页视图类
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
from .models import Data
from django.views.generic import ListView
class DataListView(ListView):
model = Data
# 渲染的页面
template_name = 'index.html'
# 上下文名字
context_object_name = 'datas'
# 每一页展示多少条数据
paginate_by = 20
ordering = 'code'
page_kwarg = 'p'
# 获取上下文处理器
def get_context_data(self, **kwargs):
context = super(DataListView, self).get_context_data(*kwargs)
paginator = context.get('paginator')
page_obj = context.get('page_obj')
pagination_data = self.get_pagintion_data(paginator, page_obj)
context.update(pagination_data)
return context
def get_pagintion_data(self, paginator, page_obj, around_count=2):
current_page = page_obj.number
num_pages = paginator.num_pages
# 显示...
left_has_more = False
right_has_more = False
if current_page <= around_count + 2:
left_pages = range(1, current_page)
else:
left_has_more = True
left_pages = range(current_page - around_count, current_page)
if current_page >= num_pages - around_count - 1:
right_pages = range(current_page + 1, num_pages + 1)
else:
right_has_more = True
right_pages = range(current_page + 1, current_page + around_count + 1)
return {
'left_pages': left_pages,
'right_pages': right_pages,
'current_page': current_page,
'left_has_more': left_has_more,
'right_has_more': right_has_more,
'num_pages': num_pages
}
二 配置url映射
path('list/', views.DataListView.as_view(), name="list")
三 渲染前端页面
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。<ul class="pagination pagination-sm">
{#是否还有上一页#}
{% if page_obj.has_previous %}
<li><a href="{% url 'data:list' %}?p={{ page_obj.previous_page_number }}">上一页</a></li>
{% else %}
<li class="disabled"><a href="javascript:void(0)">上一页</a></li>
{% endif %}
{# 中间的页码 #}
{# 是否显示左边... #}
{% if left_has_more %}
<li><a href="{% url 'data:list' %}?p=1">首页</a></li>
<li><a href="javascript:void(0)">...</a></li>
{% endif %}
{# 左边的代码 #}
{% for left_page in left_pages %}
<li><a href="{% url 'data:list' %}?p={{ left_page }}">{{ left_page }}</a></li>
{% endfor %}
{# 当前的页码 #}
<li class="active"><a href="{% url 'data:list' %}?p={{ current_page }}">{{ current_page }}</a></li>
{# 右边的页码 #}
{% for right_page in right_pages %}
<li><a href="{% url 'data:list' %}?p={{ right_page }}">{{ right_page }}</a></li>
{% endfor %}
{# 是否显示右边... #}
{% if right_has_more %}
<li><a href="javascript:void(0)">...</a></li>
<li><a href="{% url 'data:list' %}?p={{ num_pages }}">尾页</a></li>
{% endif %}
{# 下一页 #}
{% if page_obj.has_next %}
<li><a href="{% url 'data:list' %}?p={{ page_obj.next_page_number }}">下一页</a></li>
{% else %}
<li class="disabled"><a href="javascript:void(0)">下一页</a></li>
{% endif %}
</ul>
更多精彩

