views.py
def paginate_queryset(queryset, request, per_page):
"""
分页函数。
参数:
- queryset: Django 查询集,即要分页的数据集。
- request: HttpRequest对象,用于获取请求中的页码参数。
- per_page: 每页显示的记录数。
函数返回:
- Page分页对象,包含当前页的数据和分页信息,如比如总页数、页码列表等。
"""
# 使用 request.GET.get('page') 获取当前页码,如果未提供,则默认为 1
page_number = request.GET.get('page', 1)
# 创建 Paginator 对象
paginator = Paginator(queryset, per_page)
# 使用 paginator.get_page() 获取当前页的数据
page_obj = paginator.get_page(page_number)
return page_obj
def my_view(request):
# 假设 models.MyModel 是你的 Django 模型
all_objects = models.Book.objects.all()
# 调用分页函数,每页显示 5 条记录
page_obj = paginate_queryset(all_objects, request, per_page=5)
# 渲染模板,并传递分页对象
return render(request, 'admin/user_list.html', {'page_obj': page_obj})
user_list.html
<div class="pagination">
<!-- 上一页链接 -->
{% if page_obj.has_previous %}
<a href="/user/list/?page={{ page_obj.previous_page_number }}" rel="prev">上一页</a>
<!-- 分页参数?page={{ page_obj.previous_page_number }} -->
<!-- rel="prev":表示链接到上一页-->
{% endif %}
<!-- 当前页码显示 -->
<span>第 {{ page_obj.number }} 页</span>
<!-- 下一页链接 -->
{% if page_obj.has_next %}
<a href="/user/list/?page={{ page_obj.next_page_number }}" rel="next">下一页</a>
{% endif %}
</div>
urls.py
path('user/list/', views.user_list, name='user_list')