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()
Django分页器Paginator实现文章分页详解
猜你喜欢
转载自blog.csdn.net/qq_33867131/article/details/81052835
今日推荐
周排行