django使用Paginator分页展示数据

思路:

  • view得到基本数据:
    1. 提供给前端当前页面的数据
    2. 判断是否有上一页/下一页
  • url路由
  • 前端展示

View逻辑

写一个简单的View,使用Paginator时:

  1. 首先导入django.core.paginator.Paginator类,初始化的时候指定一页是多少数据
  2. 调用paginator.page(number),指定传入前端的数据是第几页的,这里的number必须是整形
from django.shortcuts import render
from django.views.generic import View
from django.core.paginator import Paginator


class ManyPageView(View):
    def get(self, request):
        my_info_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 数据源,这里可以从数据库里读
        current_page_num = request.GET.get('page', 1) # 读取get中的page属性,没有就默认1
        paginator = Paginator(my_info_list, 3)  # 每3份数据为1页
        # print('数据总数:', paginator.count)
        # print('总页数:', paginator.num_pages)
        # print("页码列表:", paginator.page_range)
        page_info = paginator.page(number=current_page_num)  # number指定第几页,第一页:number=1
        return render(request, "many_pages.html", {
    
    
            "page_info": page_info,
        })

URL路由

path('many_page', ManyPageView.as_view())

前端展示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>upload_table</title>
</head>
<body>
<body>
{% for text in page_info.object_list %}
    <span>{
   
   { text }}</span>
{% endfor %}
<div>
    {% if page_info.has_previous %}
        <a href="?page={
     
     { page_info.previous_page_number }}">上一页</a>
    {% endif %}
    {% if page_info.has_next %}
        <a href="?page={
     
     { page_info.next_page_number }}">下一页</a>
    {% endif %}
</div>
</body>
</body>
</html>

展示效果:

效果图1:
在这里插入图片描述
效果图2:
在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_35757704/article/details/121051486