分页

1 Paginator 分⻚器

Paginator⽤于分⻚,但Paginator并不具体管理具体的⻚的处理,⽽是使⽤Page对象管理具体⻚⾯

创建分⻚器对象
格式: Paginator(<query_set查询集>,每⻚显示数据的条数)

对象的属性
count 分⻚对象的个数
num_pages 总⻚数
page_range ⻚码的列表

⽅法
page(num) 返回page对象 如果给定的⻚码不存在 则抛出异常

2 page 对象

类别名称说明
属性object_list当前⻚码上的所有数据
属性number当前⻚码值
属性paginator返回Paginator的对象
方法has_next是否有下一页
方法has_previous是否有上一页
方法has_other_pages是否有上一页或下一页
方法next_page_number返回下一页页码
方法previous_page_number返回上一页页码
方法len返回当前页数据的个数

实例

url(r'^userlist/$',views.userlist,name='userlist'),
url(r'^userlist/(\d+)/$',views.userlist,name='userlist1'),
# views.py
def userlist(request,page=1):
 users = User.objects.all()
 # 实例化分⻚对象,⼀⻚两条记录
 pagination = Paginator(users,2)
 page = pagination.page(page) #某⼀⻚的分⻚对象
 return render(request,'userlist.html',context={
 'data':page.object_list, #当前⻚的数据(列表)
 'page_range':pagination.page_range,#⻚码范围
 'page':page
 })

前端代码

#模板⽂件
{% load static %}
<!DOCTYPE html>
<html lang="zh-CN">
 <head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initialscale=1">
 <!-- 上述3个meta标签*必须*放在最前⾯,任何其他内容都*必须*跟随其后! -
->
 <title>⽤户列表</title>
 <!-- Bootstrap -->
 <link href="{% static 'bootstrap/css/bootstrap.min.css' %}"
rel="stylesheet">
 </head>
 <body>
 <div class="container-fluid">
 <div class="row">
 <div class="bs-example" data-example-id="bordered-table">
 <table class="table table-bordered">
 <thead>
 <tr>
 <th>#</th>
 <th>⽤户名</th>
 <th>密码</th>
 <th>年龄</th>
 </tr>
 </thead>
 <tbody>
 {% for user in data %}
 <tr>
 <th scope="row">{{ forloop.counter }}
</th>
 <td>{{ user.username }}</td>
 <td>{{ user.password }}</td>
 <td>{{ user.age }}</td>
 </tr>
 {% endfor %}
 </tbody>
 </table>
 </div>
 </div>
 </div>
 <div class="container-fluid">
 <div class="row">
 <div class="col-md-4"></div>
 <div class="col-md-5">
 <nav aria-label="Page navigation">
 <ul class="pagination">
 {% if page.has_previous %}
 <li>
 <a href="{% url 'app:userlist1'
page.number|add:'-1' %}" aria-label="Previous">
 <span aria-hidden="true">&laquo;
</span>
 </a>
 </li>
 {% else %}
 <li class="disabled">
 <span href="{% url 'app:userlist1'
page.number|add:'-1' %}" aria-label="Previous">
 <span aria-hidden="true">&laquo;
</span>
 </span>
 </li>
 {% endif %}
 {% for num in pagerange %}
 {% ifequal num page.number %}
 <li class="active"><a href="{% url
'app:userlist1' num %}">{{ num }}</a></li>
 {% else %}
 <li><a href="{% url 'app:userlist1'
num %}">{{ num }}</a></li>
 {% endifequal %}
 {% endfor %}
 {% if page.has_next %}
 <li>
 <a href="{% url 'app:userlist1'
page.number|add:'1' %}" aria-label="Next">
 <span aria-hidden="true">&raquo;
</span>
 </a>
 </li>
 {% else %}
 <li class="disabled">
 <span href="#" aria-label="Next">
 <span aria-hidden="true">&raquo;
</span>
 </span>
 </li>
 {% endif %}
 </ul>
 </nav>
 </div>
 <div class="col-md-3"></div>
 </div>
 </div>
 <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="{% static 'bootstrap/js/jquery-1.12.4.min.js' %}">
</script>
 <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单
个插件。 -->
 <script src="{% static 'bootstrap/js/bootstrap.min.js' %}">
</script>
 </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值