Paginator分页组件

Paginator分页组件

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  • Paginator :创建分页对象
all_ = models.objects.all()
p = Paginator(all_, 10)    # 分页all_数据,每页显示10条数据
p.count() # 总数据量 
p.num_pages() # 分页数 
p.page_range() # 列表形式返回当前可有的页数 [1,2,3]
page_1 = p.page(1) # 选择第一页,返回第一页数据对象 
page_1.object_list # 返回第一页所有数据 
for var in page_1:    
    print(var) 
A 
B 
C 
...
page_1.has_next() # 是否有上一页 
page_1.has_previous() # 是否有下一页 
page_1.has_other_pages() # 是否含有其他页
page_1.next_page_number() # 下一页的页码 
page_1.previous_page_number() # 上一页的页码
page_1.start_index() # 该页第一个数据的索引 
page_1.end_index() # 该页最后一个数据的索引
  • EmptyPage :取不到页面数据,抛出该异常
all_ = models.objects.all() 
p = Paginator(all_, 10) 
try:    
    list_ = p.page(page_num) 
except EmptyPage:    
    #没有第page_num页    
    list_ = paginator.page(1)   # 取不到该也数据,直接返回第一页数据
  • PageNotAnInteger :当页数是一个非整数类型时,抛出该异常
模板页面基本使用方式
{% if topic_list.has_next %}    
	<a href="?page={{ list_.previous_page_number }}">上一页</a> 
{% endif %}

{% if topic_list.has_next %}    
	<a href="?page={{ list_.next_page_number }}">下一页</a> 
{% endif %}
例子
# 分页
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger # 分页类

def index(request):
    computer = Computer.objects.all()  # 获取所有的电脑数据
    p = Paginator(computer,3)   # 对数据进行分类展示
    id = request.GET.get('id')
    try:
        computer = p.page(id)
    except EmptyPage: # 没有传ID,默认为第一页
        computer = p.page(1)
    except PageNotAnInteger:  # ID 为小数,默认为第一页
        computer = p.page(1)

    return render(request,'index.html',locals())


# index.html
{% if computer.has_previous %}
	<a href='/?id={{ computer.previous_page_number }}'>上一页</a>
{% else %}

{% endif %}
{% if computer.has_next %}
	<a href='/?id={{ computer.next_page_number }}'>下一页</a>
{% else %}

{% endif %}
输入页数,点击跳转对应页数
# 产品列表
class GoodsList(View):
    def get(self,request):
        keyword = request.GET.get('keyword','')
        # 从前台获取当前显示的页面
        current_page = request.GET.get('page',1)
        # 每页显示多少条
        page_count = request.GET.get('page_count',10)

        if re.match('^[1-9]\d*$',str(page_count)) == None:
            page_count = 1
        
        # 获取所有信息
        if keyword:
            # 根据关键字模糊查询
            goods = Goods.objects.filter(name_contains=keyword)
        else:
            goods = Goods.objects.all()

        # 分页
        page = Paginator(goods,page_count)
        # 根据当前页显示信息
        goodslist = page.get_page(current_page)
        # 计算一共有多少页
        total_page = page.num_pages

        return render(request,'shopadmin/goods_list.html',locals())
输入页数,展示页面
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>新经资讯后台管理</title>
	<link rel="stylesheet" type="text/css" href="/static/shopadmin/css/reset.css">
	<link rel="stylesheet" type="text/css" href="/static/shopadmin/css/main.css">
	<link rel="stylesheet" href="/static/shopadmin/css/jquery.pagination.css">
	<script type="text/javascript" src="/static/shopadmin/js/jquery-1.12.4.min.js"></script>
	<script type="text/javascript" src="/static/shopadmin/js/jquery.pagination.min.js"></script>
</head>
<body>
	<div class="breadcrub" >
			当前位置:产品管理>产品列表
			<form class="news_filter_form">
				<input type="text" placeholder="请输入关键字" class="input_txt" name="keyword" value="{{keyword}}">
				<input type="submit" value="搜 索" class="input_sub">
			</form>
		</div>
		<div class="pannel">
			<a href="/shopadmin/goods_add_update"><button>添加商品</button></a>
			<table class="common_table">

				<tr>
					<th width="5%">id</th>
					<th width="10%">名称</th>
					<th width="10%">价格</th>
					<th width="10%">图片</th>
					<th width="10%">库存</th>
					<th width="10%">描述</th>
					<th width="10%">内容</th>
					<th width="10%">是否推荐</th>
					<th width="10%">添加时间</th>
					<th width="15%">管理操作</th>
				</tr>

				{% for goods in goodslist %}
				<tr>
					<td>{{goods.id}}</td>
					<td class="tleft">{{goods.name}}</td>
					<td class="tleft">{{goods.price}}</td>
					<td class="tleft"><img src="{{goods.image_url}}"></td>
					<td class="tleft">{{goods.count}}</td>
					<td class="tleft">{{goods.description}}</td>
					<td class="tleft">{{goods.content|safe}}</td>
					<td class="tleft">{{goods.is_recommend}}</td>
					<td class="tleft">{{goods.create_time}}</td>
					<td>
						<a href="/shopadmin/goods_add_update?id={{goods.id}}" class="review">修改</a>
						<a href="/shopadmin/newsreview?id={{goods.id}}" class="review">删除</a>
					</td>
				</tr>
				{% endfor %}

			</table>
		</div>
		<form class="form1">
			每页显示<input type="text" class="page_count" value="{{page_count}}" name="page_count"><button type="submit">submit</button>
		</form>

		<div class="box">
			<div id="pagination" class="page"></div>
		</div>
<script>
	$(function() {
		$("#pagination").pagination({
			currentPage: {{current_page}},
			totalPage: {{total_page}},
			callback: function(current) {
				var keyword = $('.input_txt').val()
				var page_count = $('.page_count').val()
				window.location.href="/shopadmin/newsreview?page="+current+"&keyword="+keyword+"&page_count="+page_count
			}
		});
	});
</script>

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值