在Django项目中,实现数据的分页导航效果(附代码)

发布于:2024-08-01 ⋅ 阅读:(109) ⋅ 点赞:(0)

 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')


网站公告

今日签到

点亮在社区的每一天
去签到