【Django】教程-7-分页,默认使用django的

【Django】教程-1-安装+创建项目+目录结构介绍
【Django】教程-2-前端-目录结构介绍
【Django】教程-3-数据库相关介绍
【Django】教程-4-一个增删改查的Demo
【Django】教程-5-ModelForm增删改查+规则校验【正则+钩子函数】
【Django】教程-6-搜索框-条件查询前后端

13. 分页

使用django自带分页,以下 分页方式,支持多数场景。
也支持带条件框分页场景

# 用户列表
def user_list(req):
    """用户展示"""
    # select * from userinfo order by name asc; -name 倒序
    # user_list = UserInfo.objects.all().order_by("-name")

    data_dict = {}
    query_name = req.GET.get("query_name", "") # 第二个值是默认值, 也可以写if判断
    if query_name:
        data_dict["name__contains"] = query_name
    user_list = UserInfo.objects.filter(**data_dict).order_by("-name")

    # 创建 Paginator 对象,每页显示 10 条记录
    paginator = Paginator(user_list, 10)
    # 获取当前页码,默认为第 1 页
    page_number = req.GET.get('page')
    # 获取当前页的数据
    page_obj = paginator.get_page(page_number)


    return render(req, 'user/user_list.html', {"search_data": query_name,'page_obj': page_obj})

{% extends 'layout.html' %}

{% block content %}

    <div class="container">
        <div style="float: right;width: 300px;">
            <form method="get">
                <div class="input-group">
                    <input type="text" class="form-control" placeholder="搜索" name="query_name"
                           value="{{ search_data }}"/>
                    <span class="input-group-btn">
                    <button class="btn btn-default" type="submit">查询</button>
                </span>
                </div>
            </form>
        </div>
        <div style="margin-bottom: 10px">
            <a class="btn btn-success" href="/user/add">
                <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
                新建用户</a>
        </div>
        <div style="margin-bottom: 10px">
            <a class="btn btn-success" href="/user/modelform/add">
                <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
                ModelForm新建用户</a>
        </div>


        <div class="panel panel-default">
            <div class="panel-heading"><span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>用户列表
            </div>

            <table class="table table-bordered">
                <thead>
                <tr>
                    <th>#</th>
                    <th>姓名</th>
                    <th>密码</th>
                    <th>年龄</th>
                    <th>部门</th>
                    <th>创建时间</th>
                    <th>性别</th>
                    <th>状态</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for i in page_obj %}
                    <tr>
                        <td>{{ i.id }}</td>
                        <td>{{ i.name }}</td>
                        <td class="password-cell">{{ i.password }}</td>
                        <td>{{ i.age }}</td>
                        <td>
                            {% if i.depart %}
                                {{ i.depart.title }}
                            {% endif %}

                        </td>
                        <td>{{ i.create_time|date:"Y-m-d H:i:s" }}</td>
                        <td>{{ i.get_gender_display }}</td>
                        <td>{{ i.get_status_display }}</td>
                        <td>
                            <a class="btn btn-primary btn-xs" href="/user/update/{{ i.id }}">编辑</a>
                            <a class="btn btn-primary btn-xs" href="/user/modelform/edit/{{ i.id }}">MF编辑</a>
                            <a class="btn btn-danger  btn-xs" href="/user/del?nid={{ i.id }}">删除</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>

        <!-- 分页导航 -->
        <nav aria-label="分页">
            <ul class="pagination justify-content-center" style="display: flex; flex-wrap: nowrap; align-items: center;">
                <!-- 首页 -->
                {% if page_obj.has_previous %}
                    <li class="page-item">
                        <a class="page-link" href="?page=1">首页</a>
                    </li>
                {% else %}
                    <li class="page-item disabled">
                        <span class="page-link">首页</span>
                    </li>
                {% endif %}

                <!-- 上一页 -->
                {% if page_obj.has_previous %}
                    <li class="page-item">
                        <a class="page-link" href="?page={{ page_obj.previous_page_number }}">上一页</a>
                    </li>
                {% else %}
                    <li class="page-item disabled">
                        <span class="page-link">上一页</span>
                    </li>
                {% endif %}

                <!-- 下拉选择页码 -->
                <li class="page-item" style="margin: 0 5px;">
                    <select class="form-control" onchange="goToPage(this.value)">
                        {% for page_num in page_obj.paginator.page_range %}
                            <option value="{{ page_num }}" {% if page_num == page_obj.number %}selected{% endif %}>
                                第 {{ page_num }} 页
                            </option>
                        {% endfor %}
                    </select>
                </li>

                <!-- 显示当前页码和总页数 -->
                <li class="page-item disabled" aria-current="page" style="margin: 0 5px;">
                    <span class="page-link">共 {{ page_obj.paginator.num_pages }} 页</span>
                </li>

                <!-- 下一页 -->
                {% if page_obj.has_next %}
                    <li class="page-item">
                        <a class="page-link" href="?page={{ page_obj.next_page_number }}">下一页</a>
                    </li>
                {% else %}
                    <li class="page-item disabled">
                        <span class="page-link">下一页</span>
                    </li>
                {% endif %}

                <!-- 尾页 -->
                {% if page_obj.has_next %}
                    <li class="page-item">
                        <a class="page-link" href="?page={{ page_obj.paginator.num_pages }}">尾页</a>
                    </li>
                {% else %}
                    <li class="page-item disabled">
                        <span class="page-link">尾页</span>
                    </li>
                {% endif %}
            </ul>
        </nav>

    </div>

    <script>
        const passwordCells = document.querySelectorAll('.password-cell');
        passwordCells.forEach(cell => {
            const password = cell.textContent;
            const maskedPassword = '*'.repeat(password.length);
            cell.textContent = maskedPassword;
        });

        function goToPage(page) {
            const searchParams = new URLSearchParams(window.location.search);
            searchParams.set('page', page);
            const newUrl = window.location.pathname + '?' + searchParams.toString();
            window.location.href = newUrl;
        }
    </script>

{% endblock %}

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

标题“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的据,并通过其内置的字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计和三轴陀螺仪的六自由度传感器,广泛应用于运动控制和姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计和陀螺仪的据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机和MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性和角速度。文件名“51-DMP-NET”可能表示这是一个与51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机与MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行据线和控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式和据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出据的中断;之后是据读取,通过中断服务程序从DMP接收姿态角据,据通常以四元或欧拉角形式呈现;再接着是据显示,将姿态角据转换为可读的度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值