码迷,mamicode.com
首页 > 其他好文 > 详细

Django的分页和中间件

时间:2019-01-19 00:47:02      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:1.3   ber   count   mode   前端   paginati   cut   报错   出书   

一、分页

Django的分页器(paginator)

view.py

from django.shortcuts import render,HttpResponse

# Create your views here.

from app09 import models

# 导入分页模块
from django.core.paginator import Paginator
# 做分页
# 分页器的对象,需要传object_list(要分页的所有数据queryset对象), per_page(每页要显示的个数),

def paginator(request):
book_l = models.Book.objects.all().order_by(‘pk‘)
paginator = Paginator(book_l, 40)

try:
#只写page,默认是none,我们默认是第一页。
currentpage = int(request.GET.get(‘page‘,1))
# page传个页码数,比如传1,就是每一页的对象,paginator相当于一本书,paginator.page就相当于书的具体的哪一页

# 取出书的第一页,第一页的对象,page是每一页的对象
# page = paginator.page(1)

page = paginator.page(currentpage)
except Exception as e:
#如果输入法的不合法就显示第一页,就不会报错
currentpage = 1
page = paginator.page(currentpage)

#传入页码数,拿到的就是当前页对象
page = paginator.page(currentpage)

# page_range = paginator.page_range


#1 总页数是否大于11,当总页码数大于11时
if paginator.num_pages >11:
#1.1 当前页码数是否小于6
if currentpage <=6:
#1.1.1 当前页码数小于6的时候,就生成11个页码数
page_range = range(1,12)
#1.2 当前页码数+5大于总页码数
elif currentpage + 5 >= paginator.num_pages:
# 1.2.1 往后推11页页码数
page_range = range(paginator.num_pages - 10,paginator.num_pages + 1)
# 1.3 当前页码数大于6,就生成一个左5 右5的区间
else:
page_range = range(currentpage - 5,currentpage + 6)
#2 总页码数不大于11的是有,页码有多少显示多少页码
else:
page_range = paginator.page_range




# 总数据条数
print(‘总数据条数‘, paginator.count)
print(‘总页数‘, paginator.num_pages)

# 需要在前端显示出来
print(‘页码的列表‘, paginator.page_range)
print(‘页码的列表‘, list(paginator.page_range))


# page传个页码数,比如传1,就是每一页的对象,paginator相当于一本书,paginator.page就相当于书的具体的哪一页

# 取出书的第一页,第一页的对象,page是每一页的对象
# page = paginator.page(1)

# page = paginator.page(currentpage)

# 每次从这一页中拿出一个个的书
# 在模板中for循环这个就可以拿出数据
# for book in page:
# print(book.name)
# print(page.has_next()) #是否有下一页
# print(page.next_page_number()) #是否有下一页的页码
# print(page.has_previous()) #是否有上一页
# print(page.previous_page_number()) #是否有上一页的页码

# 去写模板

return render(request, ‘pagintaor.html‘, locals())



def booklist(request):
book_l = models.Book.objects.all()

return HttpResponse(‘OK‘)





# 批量生产数据
# def createbook(request):
# # 插入104本书(对象),先生成列表
# li = []
# for i in range(105):
# li.append(models.Book(name=‘honglpimeng%s‘%i,price=1+i))
# res = models.Book.objects.bulk_create(li,20)
#
# return HttpResponse(‘OK‘)


<><><><><><><><><<><><><><><><><><><><><><><><><><><><><><><><><><><><><><

HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{# 引入bootstrap#}
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
<title>Title</title>
</head>
<body>


<table class="table table-bordered">
<thead>
<tr>
<th>序号</th>
<th>书名</th>
<th>价格</th>
</tr>
</thead>
<tbody>
{% for book in page %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ book.name }}</td>
<td>{{ book.price }}</td>
</tr>

{% endfor %}

</tbody>

</table>


{#//加分页 让有多少页就显示多少页#}
<nav aria-label="Page navigation">
<ul class="pagination">
{% if page.has_previous %}
<li>
{# <a href="/paginator/?page={{ page.previous_page_number }}" aria-label="Previous">#}
<a href="/paginator/?page={{ page.previous_page_number }}" aria-label="Previous">
<span aria-hidden="true">上一页</span>
</a>
</li>
{% else %}
<li class="disabled">
<a href="" aria-label="Previous">
<span aria-hidden="true">上一页</span>
</a>
</li>


{% endif %}

{% for foo in page_range %}

{% if currentpage == foo %}
{# 变色,判断当前页面是不是循环到的页面,如果是加active#}
<li class="active"><a href="/paginator/?page={{ foo }}">{{ foo }}</a></li>

{% else %}
<li><a href="/paginator/?page={{ foo }}">{{ foo }}</a></li>

{% endif %}




{% endfor %}

{% if page.has_next %}
<li>
{# <a href="/paginator/?page={{ page.next_page_number }}" aria-label="Next">#}
<a href="/paginator/?page={{ page.next_page_number }}" aria-label="Next">
<span aria-hidden="true">下一页</span>
</a>
</li>
{% else %}
<li class="disabled">
<a href="" aria-label="Next">
<span aria-hidden="true">下一页</span>
</a>
</li>
{% endif %}


</ul>
</nav>


</body>
</html>



<><><><><><><><><<><><><><><><><><><><><><><><><><><><><><><><><><><><><><




Django的分页和中间件

标签:1.3   ber   count   mode   前端   paginati   cut   报错   出书   

原文地址:https://www.cnblogs.com/zhangrenguo/p/10290215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!