django 之 分页

django 分页 ******

	- 分批获取数据 每次10条
		models.UserInfo.objects.all()[0:10]  #获取0-10的数据
		models.UserInfo.objects.all()[10:20] #获取10-20的数据
	
	- Django自带
		from django.core.paginator import Paginator, Page
	
		适合于:仅有上一页 下一页 
		弊端:页码全部显示,同时只适用于django开发环境,有很大的局限性。
		def index(request):
			current_page = request.GET.get('page')

			user_list = models.UserInfo.objects.all()
			paginator = Paginator(user_list,10) #创建paginator对象 Paginator(操作的数据列表,每页显示数据的数量)
				#- paginator对象下.所有的方法
				# per_page: 每页显示条目数量
				# count:    数据总个数
				# num_pages:总页数
				# page_range:总页数的索引范围,如: (1,10),(1,200) 总共有多少页码
				# page:     page对象
			try:
				posts = paginator.page(current_page)  #生成一个page对象,.page(页码数)
					#page对象下所有的方法:
					# has_next              是否有下一页
					# next_page_number      下一页页码
					# has_previous          是否有上一页
					# previous_page_number  上一页页码
					# object_list           分页之后的数据列表
					# number                当前页
					# paginator             paginator对象
			except PageNotAnInteger as e:
				posts = paginator.page(1)  #page对象 第一页
			except EmptyPage as e:
				posts = paginator.page(1)
			return render(request,'index.html',{'posts':posts})
	
		<h1>用户列表</h1>
		<ul>
			{% for row in posts.object_list %}
				<li>{{ row.name }}</li>
			{% endfor %}
		</ul>
		<div>
			{% if posts.has_previous %}
				<a href="/index.html?page={{ posts.previous_page_number }}">上一页</a>
			{% endif %}

			{% if posts.has_next %}
				<a href="/index.html?page={{ posts.next_page_number }}">下一页</a>
			{% endif %}
		</div>
	
		- 示例:
			-index.html页面
				<!DOCTYPE html>
				<html lang="en">
				<head>
					<meta charset="UTF-8">
					<title>Title</title>
				</head>
				<body>
					<h3>用户信息表</h3>
					<ul>
					   {% for item in posts.object_list %} {#获取分页之后当前页的数据列表#}
							<li>{{ item.name }}</li>
						{% endfor %}
					</ul>
					<div>
						{% if posts.has_previous %} {# 判断有没有上一页 #}
							<a href="/index/?page={{ posts.previous_page_number }}">上一页</a>
						{% endif %}
						{% for i in posts.paginator.page_range %} {# 转成paginator对象,获取所有页码 #}
							<a href="/index/?page={{ i }}">{{ i }}</a>
						{% endfor %}
						{% if posts.has_next %} {# 判断有没有下一页 #}
							<a href="/index/?page={{ posts.next_page_number }}">下一页</a>
						{% endif %}
					</div>
				</body>
				</html>
			-views.py函数
				def index(request):
				current_page = int(request.GET.get("page")) #获取当前页码
				user_list = models.UserInfo.objects.all()  #获取所有信息数据
				paginator = Paginator(user_list,10)  #创建Paginator对象
				try:
					posts = paginator.page(current_page) #创建page对象
				except Exception as e:
					posts = paginator.page(1)
				return render(request,"index.html",{"posts":posts})

- 自定分页组件******<拿来直接用就OK了!>

python web框架 之 自定分页组件<万能应用版>

posted @ 2017-07-01 23:54  细雨蓝枫  阅读(236)  评论(1编辑  收藏  举报