Django分页器Paginator实现文章分页详解

1、models.py文件:

views.py文件:
from django.db import models
from faker import Factory

class Video(models.Model):
	title = models.CharField(null=True, blank=true, max_length=300)
	content = models.TextField(null=True, blank=true)
	url_image = models.URLField(null=True, blank=true)
	editors = models.BoolearnField(default=true)

	def __str__(self)
		return self.title

2、views.py文件
from django.shortcuts import render
from website.models import video
# 导入分页器类
from django.core.paginator import Paginator

def list(request)
	context = {}
	# 从数据库选出所有数据
	data_list = Video.objects.all()
	#构造分页器
	page_robot = Paginator(data_list, 9)
	data_list = page_robot.page(request.GET.get('page'))

	context['data_list'] = data_list
	return render(request, 'list.html', context)
到这里分页就完成了,下面讲讲分页常见的2种异常处理方法

完善后的views.py文件
from django.db import models
from faker import Factory, EmptyPage, PageNotAnInteger 

def list(request)
	context = {}
	# 从数据库选出所有数据
	data_list = Video.objects.all()
	#构造分页器
	page_robot = Paginator(data_list, 9)
	page_num = request.GET.get('page')

	# 加一个异常处理语句try except , 没有任何错误执行try , 出现哪种错误执行对应的except
	try:
		data_list = page_robot.page(page_num)
		# 当没有任何错误的情况下,正常加载我用GET方法,传过来的页码
	except EmptyPage:
		data_list = page_robot.page(page_robot.page_num)
		# 出现了一个我没有的页码,就让他显示你加载数据的最后一页
		# page_robot.page_num这个方法就返回,你加载数据的最后一页
	except PageNotAnInteger:
		# raise Http404('EmptyPage')如果想直接给出报错页
	 	data_list = page_robot.page(1)
	 	# 如果给我的页码不是整数的话,我只给你显示第一页

	context['data_list'] = data_list
	return render(request, 'list.html', context)

3、list.html文件
<div>
	<div>
		<!-- 上一页按钮 --!>
		{% if data_list.has_previous %}
			<a href="?page={{ dta_list.previous_page_number }}" class="item">
				<i class="icon red left arrow"></i>
			</a>
		{% else %}
			<a href="?page={{ dta_list.start_index }}" class="disable item">
				<i class="icon left arrow"></i>
			</a>
		{% endif %}
		<!-- 下一页按钮 --!>
		{% if data_list.has_next %}
			<a href="?page={{ dta_list.next_page_number }}" class="item">
				<i class="icon red right arrow"></i>
			</a>
		{% else %}
			<a href="?page={{ dta_list.start_index }}" class=" disable item">
				<i class="icon right arrow"></i>
			</a>
		{% endif %}
	</div>
</div>

4、分类,分页功能的实现方法:
# 其实就是利用传入的cate字段,来判断走哪条sql语句
def listing(request, cate=None)
	if cate is None:
		dta_list = Video.objects.all()
	if cate == 'editors':
		dta_list = Video.objects.filter(editors_choice=True)
	else:
		dta_list = Video.objects.all()

猜你喜欢

转载自blog.csdn.net/qq_33867131/article/details/81052835