Django-分页

分页

  • 分页是指在web页面有大量数据需要显示,为了方便在每个页面中只显部分数据
  • Django中提供了Paginator类可以方便的实现分页功能
  • from django.core.paginator import Paginator
Paginator对象
paginator = Paginator(object_list,per_page)
'''
object_list : 需要分页数据对象列表
per_page : 每页数据个数
返回值 : Paginator对象
'''
'''
Paginator属性
count: 需要分页数据的对象总数
num_pages:分页后的页面总数
page_range:从1开始的range对象,用于记录当前页码数
per_page:每页的个数
'''
Paginator.page(number)
'''
参数number为页码信息从1开始
返回当前number页对应的页信息
如果提供的页码不存在,抛出invalidpage异常
'''
page对象

负责具体某一页的数据的管理
创建对象:page = paginator.page(页码)
Page对象属性:

  • object_list:当前页上所有数据对象的列表
  • number:当前页序号
  • paginator:当前page对象相关的Paginator对象

page方法:

  • has_next():如果有下一个返回True
  • has_previous():如果有上一页返回True
  • has_other_pages():如果有上一页或者下一页返回true
  • next_page_number():返回下一个的页码,不存在抛出invalidpage异常
  • previous_page_number():返回上一个的页码,不存在抛出invalidpage异常
实例
# file:views.py
from django.core.paginator import Paginator
def test_page(request):

	# url:/test/page/页码(1-*)
	# url:/test/page?page=页码
	#这里我们用第二种
	page_num = request.GET.get('page',1)
	all_data = ['a', 'b', 'c', 'd', 'e']
	#初始化paginator
	paginator = Paginator(all_data,2) 
	# 初始化具体页码个page对象
	c_page = paginator.page(int(page_num))
	return render(request,'test_page.html', locals())

file:test_page.html

{% for p in c_page %}
	<p>
	{{ p }}
	</p>
{% endfor %}
{% if c_page.has_previous %}
	<a href = "/test_page?page={{c_page.previous_page_number}}">上一页</a>
{%endif%}

{% for p_num in paginator.page_range %}
	{% if p_num == c_page.number %}
		{{p_num}}
	{% else %}
		<a href="/test_page?page={{ p_num}}">{{ p_num }}</a>
	{% endif %}
{% endfor %}

{% if c_page.has_next %}
	<a href = "/test_page?page={{c_page.next_page_number}}">下一页</a>
{%endif%}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值