Paginator分页组件
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
all_ = models.objects.all()
p = Paginator(all_, 10)
p.count()
p.num_pages()
p.page_range()
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()
all_ = models.objects.all()
p = Paginator(all_, 10)
try:
list_ = p.page(page_num)
except EmptyPage:
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:
computer = p.page(1)
except PageNotAnInteger:
computer = p.page(1)
return render(request,'index.html',locals())
{% 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>