Django 分页(包括固定页数项)

该文章展示了如何在Django框架中处理URL参数,实现分页功能。通过分析请求URL,添加缺失的查询参数,从数据库获取数据并进行分页处理。前端使用HTML和JavaScript展示分页结果,用户可以查看和切换不同页码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标下图

在这里插入图片描述

1、Django 路由urls

url('purchase/$', views.purchase)

2、Django 逻辑层views

def purchase(request):
    # 获取前端页面的路由,然后进行分析
    fullpath = str(request.get_full_path())
    if fullpath.find('pagesize') == -1 and fullpath.find('page=') == -1:
        urls = fullpath + '?page='
    elif fullpath.find('pagesize') == -1 and fullpath.find('page=') > 0:
        urls = fullpath[0:fullpath.find('?page=')] + '?page='
    elif fullpath.find('pagesize') > 0 and fullpath.find('page=') == -1:
        urls = fullpath + '&page='
    elif fullpath.find('pagesize') > 0 and fullpath.find('page=') > 0:
        urls = fullpath[0:fullpath.find('&page=')] + '&page='
    # 前端获取的页码,默认是1
    CurPage = int(request.GET.get("page", 1))
    # 获取前端的分页数字,每一页可以展示多少条数据
    try:
        pagesize = int(request.GET.get("pagesize", 10))
    except:
        pagesize = 10
    if pagesize == 0:
        pagesize = 10
    # 数据对象所有
    Purchase = enteroutuser.objects.all()
    # 根据每页多少条数据进行整理的数据对象
    paginator = Paginator(Purchase, pagesize)
    # 一共多少页
    numbers = paginator.num_pages
    #  一共多少条记录
    number = int(len(Purchase))
    # 获取每页的数据对象
    try:
        page_someone = paginator.page(CurPage)
    except EmptyPage:
        page_someone = paginator.page(1)
    # 每页开始页码,整个页面最多显示7页,多的不展示
    begin = (CurPage - 3)
    if begin < 1:
        begin = 1
    # 每页结束页码
    end = begin + 6
    if end > paginator.num_pages:
        end = paginator.num_pages
    if end <= 7:
        begin = 1
    else:
        begin = end - 6
    # pagelist  =  range(1, 4)
    pagelist = range(begin, end + 1)
	
    return render(request, "purchase.html", locals())

3、前端页面再templates中的purchase.html

这里的是对应你创建的数据中字段的名称

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="utf-8">
    <title>分页测试</title>
    <script src="../static/js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript" src="../static/js/jquery-3.4.1.min.js"></script>
    <style>
        tbody tr {
            text-align: center
        }
        thead th {
            text-align: center
        }
        li {
            list-style-type: none;
        }
    </style>
</head>
<body>
<div>
    <div><h3>{{number}}条记录</h3>
        <form action="/purchase/" method="GET" role="form"
              style="width: 100%;float: left">

            {%if pagesize%}
            行数:<input type="text" value="{{pagesize}}" name="pagesize" autocomplete="off">
            {%else%}
            <input type="text" value="10" name="pagesize" autocomplete="off">
            {%endif%}
            <button type="submit" value="">查询</button>
        </form>
    </div>
    <div style="height: 50px"></div>

    <table>
        <tr>
            <th style="width: 50px">#</th>
            <th style="width: 150px">姓名</th>
            <th style="width: 150px">手机号码</th>
            <th style="width: 200px">身份证号码</th>
            <th style="width: 60px">性别</th>
            <th style="width: 60px">状态</th>
            <th style="width: 260px">备注</th>
            <th style="width: 50px">状态</th>
            <th style="width: 180px">创建时间</th>
            <th style="width: 200px">更新时间</th>
        </tr>
        <tbody>
        {% for item in page_someone %}
        <tr>
            <td>{{item.id}}</td>
            <td>{{ item.username}}</td>
            <td>{{ item.number}}</td>
            <td>{{ item.idnumber }}</td>
            <td>{{ item.gender }}</td>
            <td>{{ item.enteroutstatus }}</td>
            <td>{{ item.remarks }}</td>
            <td>{{ item.deletestatus }}</td>
            <td>{{ item.createtime|date:"Y年m月d日" }}</td>
            <td>{{ item.updatetime|date:"Y年m月d日" }}</td>
        </tr>
        {% endfor %}
        </tbody>
    </table>
    <nav>
        <ul>
            <li>
                {% if page_someone.has_previous %}
                <a href="{{urls}}{{ CurPage|add:-1 }}">
                    <span> 上一页  </span>
                </a>
                {% else %}
                <a href="#">
                    <span> 上一页 </span>
                </a>
                {% endif %}
            </li>
            {% for n in pagelist %}
            {% if CurPage == n %}
            <li class="active"><a href="{{urls}}{{ n }}">{{ n }}</a>
                {% else %}
            <li><a href="{{urls}}{{ n }}">{{ n }}</a></li>
            {% endif %}
            {% endfor %}

            <li>
                {% if page_someone.has_next %}
                <a href="{{urls}}{{ page_someone.next_page_number }}">
                    <span> 下一页 </span>
                </a>
                {% else %}
                <a href="#">
                    <span> 下一页 </span>
                </a>
                {% endif %}
            </li>
            <li>
                <a><span>共&nbsp;{{ numbers }}页</span></a>
            </li>

        </ul>
    </nav>
</div>


</body>
</html>

4、打开浏览器进入数据展示页面

页面没有样式,但是我们需要的功能都可以显示到页面上的。
在这里插入图片描述

5、每页展示的数量

每页显示1条数据,然后就分成了12页,然后点击每一页都会进行跳转
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值