Django 分页器
分页器
urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^page/', views.page), # 路由到分页器函数
]
views.py
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from hc import models
def test(request):
user = models.UserInfo.ojbects.all() # 这里是获取数据库的数据
p = Paginator(user,3) # p = 实例化对象 (对象, 开头显示几条数据)
print ('数据总数: ', p.count) #页码总数
print ('数据页数: ', p.num_pages) #当前页码
print ('range(x, y): ', p.page_range) #从多少页 到多少页
print ('是否有下一页: ', p.page(2).has_next()) #是否有下一页
print ('是否有上一页: ', p.page(2).has_previous()) #是否有上一页
print ('是否有其他页: ', p.page(2).has_other_pages()) #是否有其他页
print ('下一页的页码: ', p.page(2).next_page_number()) #下一页的页码
print ('上一页的页码: ', p.page(2).previous_page_number()) #上一页的页码
get_page = int(reuqest.GET.get('page',1)) #接收进来的是字符串,需要转换类型
#异常处理
try:
user_page = p.page(get_page) #跳转当前页面
except PageNotAnInteger:
user_page = p.page(1) #回到首页
except EmptyPage:
user_page = p.page(p.num_pages) #回到当前页面
return render(request, 'page.html', locals())
template
<table>
<thead>
<tr>
<th>用户名</th>
<th>密码</th>
<th>人名</th>
</tr>
</thead>
<tbody>
{% for item in user_page %}
<tr>
<td>{{item.username}}</td>
<td>{{item.password}}</td>
<td>{{item.name}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div>
<ul class="pagination" id="pager">
{% if user_page.has_previous %}
<li class="previous"><a href="/page/?page={{user_page.previous_page_number}}">上一页</a></li>
{% else %}
<li class="previous disavled"><a href="#">上一页</a></li>
{% endif %}
{% for num in p.page_range %}
{% if num == page %}
<li class="item active"><a href="/page/?page={{ num }}">{{ num }}</a></li>
{% else %}
<li class="item"><a href="/page/?page={{ num }}">{{ num }}</a></li>
{% endif %}
{% endfor %}
{% if user_page.has_next %}
<li class="next"><a href="/page/?page={{ user_page.next_page_number }}">下一页</a></li>
{% else %}
<li class="next disabled"><a href="#">下一页</a></li>
{% endif %}
</ul>
</div>