分页是django里的一个难点,如果要用它实现可以使用django提供的组件Paginator,也可以很方便的引入bootstrap样式。
后端代码:
# 从数据库获取到所有的对象
user_list = UserInfo.objects.all()
# 用Paginator对prettynum_list里的数据分页,每15条一页
paginator = Paginator(user_list, 15)
# 从页面url GET获取到page的值,这里的1表示若为空时默认值
page_number = request.GET.get('page', 1)
# 获取哪一页
page_obj = paginator.get_page(page_number)
# 获取本页所有的对象赋值给queryset
page_obj_queryset = page_obj.object_list
# 这里传过去的两个值,一个是queryset,一个是页码
return render(request, "user_list.html", {'page_obj_queryset': page_obj_queryset, "page_obj": page_obj})
前端代码:
<tbody>
{% for obj in page_obj_queryset %}
<tr>
<td>{{ obj.id }}</td>
<td>{{ obj.mobile }}</td>
<td>
<a class="btn btn-primary btn-xs" href="/prettynum/{{ obj.id }}/edit">编辑</a>
<a class="btn btn-danger btn-xs" href="/prettynum/{{ obj.id }}/delete">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
分页组件:
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">« 首页</a>
<a href="?page={{ page_obj.previous_page_number }}">< 上一页</a>
{% endif %}
<span class="current-page">
{{ page_obj.number }} / {{ page_obj.paginator.num_pages }}
</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">下一页 ></a>
<a href="?page={{ page_obj.paginator.num_pages }}">尾页 »</a>
{% endif %}
</span>
</div>