Python学习第十九天

Django-分页

后端分页

        Django提供了Paginator类来实现后端分页。Paginator类可以将一个查询集(QuerySet)分成多个页面,每个页面包含指定数量的对象。

from django.shortcuts import render, redirect, get_object_or_404
from .models import User
from .forms import UserForm
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger'''用户列表
'''
def user_list(request):user_list = User.objects.all()# 处理自定义值try:# 获取用户选择的每页显示数量,默认为 10per_page = int(request.GET.get('per_page', 10))per_page = int(per_page)  # 将 per_page 转换为整数if per_page <= 0:  # 如果输入的值小于等于0,设置为默认值10per_page = 10except (ValueError, TypeError):  # 如果 per_page 不是数字,设置为默认值10per_page = 10# 分页paginator = Paginator(user_list, per_page)page_number = request.GET.get('page')try:page_obj = paginator.get_page(page_number)  # 获取当前页except PageNotAnInteger:  # 如果 page 不是整数,跳转到第一页page_obj = paginator.get_page(1)except EmptyPage:  # 如果 page 超出范围,跳转到最后一页page_obj = paginator.get_page(paginator.num_pages)# 允许的每页显示数量列表allowed_per_page = [10, 20, 50, 100, 200]return render(request, 'myapp/user_list.html', {'page_obj': page_obj,'per_page': per_page,  # 将每页显示数量传递给模板'allowed_per_page': allowed_per_page,})

前端分页

      通用前端的分页代码支持输入页码,也支持选择页码,跳转到对应页面

<nav aria-label="Page navigation" class="mt-4"><ul class="pagination justify-content-center"><!-- 首页按钮 -->{% if page_obj.has_previous %}<li class="page-item"><a class="page-link" href="?page=1&per_page={{ per_page }}" aria-label="First"><span aria-hidden="true">首页</span></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 }}&per_page={{ per_page }}" aria-label="Previous"><span aria-hidden="true">上一页</span></a></li>{% else %}<li class="page-item disabled"><span class="page-link">上一页</span></li>{% endif %}<!-- 当前页码信息 --><li class="page-item active"><span class="page-link">第 {{ page_obj.number }} 页,共 {{ 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 }}&per_page={{ per_page }}" aria-label="Next"><span aria-hidden="true">下一页</span></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 }}&per_page={{ per_page }}" aria-label="Last"><span aria-hidden="true">末页</span></a></li>{% else %}<li class="page-item disabled"><span class="page-link">末页</span></li>{% endif %}</ul><!-- 输入页码跳转和选择每页显示数量 --><div class="d-flex justify-content-center mt-3"><!-- 输入页码跳转 --><form method="get" action="" class="form-inline mr-3"><div class="input-group"><input type="number" name="page" class="form-control" min="1" max="{{ page_obj.paginator.num_pages }}"placeholder="页码" aria-label="页码" required><input type="hidden" name="per_page" value="{{ per_page }}"><div class="input-group-append"><button type="submit" class="btn btn-outline-primary">跳转</button></div></div></form><!-- 选择每页显示数量 --><form method="get" action="" class="form-inline"><div class="input-group"><select name="per_page" class="form-control" aria-label="每页显示数量" onchange="this.form.submit()"><option value="10" {% if per_page == 10 %}selected{% endif %}>10 条/页</option><option value="20" {% if per_page == 20 %}selected{% endif %}>20 条/页</option><option value="50" {% if per_page == 50 %}selected{% endif %}>50 条/页</option><option value="100" {% if per_page == 100 %}selected{% endif %}>100 条/页</option><option value="200" {% if per_page == 200 %}selected{% endif %}>200 条/页</option><option value="1" {% if per_page != 10 and per_page != 20 and per_page != 50 and per_page != 100 and per_page != 200 %}selected{% endif %}>自定义</option></select>{% if per_page != 10 and per_page != 20 and per_page != 50 and per_page != 100 and per_page != 200 %}<input type="number" name="per_page" class="form-control ml-2" min="1"value="{{ per_page }}" placeholder="自定义" aria-label="自定义" required>{% endif %}</div></form></div>
</nav>

静态资源配置

使用

在前端中需要引入背景图或者其他的静态资源

配置settings.py

# 静态资源
STATIC_URL = 'static/'
import os
# 静态文件目录
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),           # 全局静态文件目录os.path.join(BASE_DIR, 'user/static'),     # user app 的静态文件目录
]

目录以及加载使用

html中使用

<!-- 加载静态文件 -->
{% load static %}
<!-- 全局静态文件 -->
<!--<body style="background-image: url('{% static '02.png' %}');">-->
<!-- 引入app下的的静态文件 --><body style="background-image: url('{% static 'user/images/backgroud_image.png' %}');">

防止多次加载

        在 Django 模板中,使用 {% block %} 来定义可覆盖的区域,避免在多个模板中重复加载相同的静态资源。(主要是使用这个其他通过继承这部分内容 有点像是iframe标签 引入了部分代码块)

# 在main.html中使用{% block content %}{% endblock %}<!-- 加载静态文件 -->
{# main.html注释哈 #}
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}首页{% endblock %}</title>
</head>
<!-- 全局静态文件 -->
<!--<body style="background-image: url('{% static '02.png' %}');">-->
<!-- 引入app下的的静态文件 比如使用app下的静态资源不需要重复引入 -->
<body style="background-image: url('{% static 'user/images/backgroud_image.png' %}');">
<a href="{% url 'main' %}">首页</a>
<a href="{% url 'register' %}">注册</a>
<a href="{% url 'login' %}">登录</a>
{# 主要是使用这个其他通过继承这部分内容 有点像是iframe标签 引入了部分代码块 #}
{% block content %}{% endblock %}
</body>
</html>

子类通过继承{% extends 'main.html' %} 以及主类中的{% block 名称%}

{# login.html的模版 继承main的静态资源只需要写自己的相关代码块即可 #}
{% extends 'main.html' %}{% block content %}
用户名:<input name="username" value ="" placeholder="请输入用户名"/>
密码:<input name="password" value ="" placeholder="请输入密码"/>
{% endblock%}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34857.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的论文解析

前言 在自然语言处理&#xff08;NLP&#xff09;和深度学习的快速发展中&#xff0c;Transformer模型和 GPT系列模型扮演了至关重要的角色。本篇博客旨在对这些开创性的论文进行介绍&#xff0c;涵盖它们的提出时间、网络结构等关键信息&#xff0c;能够快速的理解这些模型的设…

【DeepSeek应用】本地部署deepseek模型后,如何在vscode中调用该模型进行代码撰写,检视和优化?

若已成功在本地部署了 DeepSeek 模型(例如通过 vscode-llm、ollama 或私有 API 服务),在 VS Code 中调用本地模型进行代码撰写、检视和优化的完整流程如下: 1. 准备工作:确认本地模型服务状态 模型服务类型: 若使用 HTTP API 服务(如 FastAPI/Flask 封装),假设服务地址…

【C语言】函数和数组实践与应用:开发简单的扫雷游戏

【C语言】函数和数组实践与应用&#xff1a;开发简单的扫雷游戏 1.扫雷游戏分析和设计1.1扫雷游戏的功能说明&#xff08;游戏规则&#xff09;1.2游戏的分析与设计1.2.1游戏的分析1.2.2 文件结构设计 2. 代码实现2.1 game.h文件2.2 game.c文件2.3 test.c文件 3. 游戏运行效果4…

需求分析、定义、验证、变更、跟踪(高软47)

系列文章目录 需求分析、定义、验证、变更、跟踪 文章目录 系列文章目录前言一、需求分析二、需求定义三、需求验证四、需求变更五、需求跟踪六、真题总结 前言 本节讲明需求分析、定义、验证、变更、跟踪相关知识。 一、需求分析 二、需求定义 三、需求验证 四、需求变更 五、…

【拒绝算法PUA】LeetCode 2270. 分割数组的方案数

系列文章目录 【拒绝算法PUA】0x00-位运算 【拒绝算法PUA】0x01- 区间比较技巧 【拒绝算法PUA】0x02- 区间合并技巧 【拒绝算法PUA】0x03 - LeetCode 排序类型刷题 【拒绝算法PUA】LeetCode每日一题系列刷题汇总-2025年持续刷新中 C刷题技巧总结&#xff1a; [温习C/C]0x04 刷…

uniapp 实现的步进指示器组件

采用 uniapp 实现的一款步进指示器组件&#xff0c;展示业务步骤进度等内容&#xff0c;对外提供“前进”、“后退”方法&#xff0c;让用户可高度自定义所需交互&#xff0c;适配 web、H5、微信小程序&#xff08;其他平台小程序未测试过&#xff0c;可自行尝试&#xff09; 可…

每日Attention学习26——Dynamic Weighted Feature Fusion

模块出处 [ACM MM 23] [link] [code] Efficient Parallel Multi-Scale Detail and Semantic Encoding Network for Lightweight Semantic Segmentation 模块名称 Dynamic Weighted Feature Fusion (DWFF) 模块作用 双级特征融合 模块结构 模块思想 我们提出了 DWFF 策略&am…

接上一篇,C++中,如何设计等价于Qt的信号与槽机制。

看下面例子&#xff1a; class FileManager : public QObject {Q_OBJECTpublic:FileManager(QObject* parent nullptr) : QObject(parent) {}void changeFileName(const QString& newName) {fileName newName;emit fileNameChanged(fileName);}signals:void fileNameChan…

上传本地项目到GitHub

一、在GitHub上创建仓库 1.点击右上角头像–>点击Your repositories 2.点击New 3.创建仓库 网址复制一下&#xff0c;在后面git上传时会用到 二、打开Git Bash 1.cd 进入项目所在路径 2.输入git init 在当前项目的目录中生成本地的git管理&#xff08;当前目录下出现.…

基于Python的selenium入门超详细教程(第2章)--单元测试框架unittest

学习路线 自动化测试介绍及学习路线-CSDN博客 ​自动化测试之Web自动化&#xff08;基于pythonselenium&#xff09;-CSDN博客 基于Python的selenium入门超详细教程(第1章)--WebDriver API篇-CSDN博客 目录 前言&#xff1a; 一、单元测试 1. 单元测试的定义 2. 单元测…

HTML5 drag API实现列表拖拽排序

拖拽API&#xff08;Drag and Drop API&#xff09;是HTML5提供的一组功能&#xff0c;使得在网页上实现拖放操作变得更加简单和强大。这个API允许开发者为网页元素添加拖拽功能&#xff0c;用户可以通过鼠标将元素拖动并放置到指定的目标区域。 事件类型 dragstart&#xff1…

游戏引擎学习第163天

我们可以在资源处理器中使用库 因为我们的资源处理器并不是游戏的一部分&#xff0c;所以它可以使用库。我说过我不介意让它使用库&#xff0c;而我提到这个的原因是&#xff0c;今天我们确实有一个选择——可以使用库。 生成字体位图的两种方式&#xff1a;求助于 Windows 或…

Kafka可视化工具KafkaTool工具的使用

Kafka Tool工具 介绍 使用Kafka的小伙伴&#xff0c;有没有为无法直观地查看 Kafka 的 Topic 里的内容而发过愁呢&#xff1f;下面推荐给大家一款带有可视化页面的Kafka工具&#xff1a;Kafka Tool &#xff08;目前最新版本是 3.0.2&#xff09; 注意&#xff1a;以前叫Kafk…

在Spring Boot项目中接入DeepSeek深度求索,感觉笨笨的呢

文章目录 引言1. 什么是DeepSeek&#xff1f;2. 准备工作2.1 注册DeepSeek账号 3.实战演示3.1 application增加DS配置3.2 编写service3.3 编写controller3.4 编写前端界面chat.html3.5 测试 总结 引言 在当今快速发展的数据驱动时代&#xff0c;企业越来越重视数据的价值。为了…

【数据分析】读取文件

3. 读取指定列 针对只需要读取数据中的某一列或多列的情况&#xff0c;pd.read_csv()函数提供了一个参数&#xff1a;usecols&#xff0c;将包含对应的columns的列表传入该参数即可。 上面&#xff0c;我们学习了读取 "payment" 和 "items_count" 这…

Ubuntu 优化 Vim 指南

Vim 是一款功能强大的文本编辑器&#xff0c;通过合适的配置&#xff0c;可以变成一个接近 IDE 的高效开发工具。本指南提供 最精简、最实用 的 Vim 配置&#xff0c;满足 代码补全、语法高亮、代码格式化、目录管理等常用需求。 1. 必须安装的软件 首先&#xff0c;确保你的系…

信创环境下TOP5甘特图工具对比:从功能到适配性测评

在数字化转型的浪潮中&#xff0c;项目管理的高效与否直接决定了企业能否在激烈的市场竞争中脱颖而出。而甘特图作为项目管理中不可或缺的工具&#xff0c;其重要性不言而喻。尤其是在信创环境日益受到重视的当下&#xff0c;选择一款适配性强、功能完备的甘特图工具&#xff0…

MinIO的预签名直传机制

我们传统使用MinIo做OSS对象存储的应用方式往往都是在后端配置与MinIO的连接和文件上传下载的相关接口&#xff0c;然后我们在前端调用这些接口完成文件的上传下载机制&#xff0c;但是&#xff0c;当并发量过大&#xff0c;频繁访问会对后端的并发往往会对服务器造成极大的压力…

【NLP 38、实践 ⑩ NER 命名实体识别任务 Bert 实现】

去做具体的事&#xff0c;然后稳稳托举自己 —— 25.3.17 数据文件&#xff1a; 通过网盘分享的文件&#xff1a;Ner命名实体识别任务 链接: https://pan.baidu.com/s/1fUiin2um4PCS5i91V9dJFA?pwdyc6u 提取码: yc6u --来自百度网盘超级会员v3的分享 一、配置文件 config.py …

Windows下安装MongoDB 8

在Windows下安装MongoDB&#xff0c;首先需要确定自己的Windows系统版本以及MongoDB社区版所能支持的系统版本。这里使用的是Windows 10操作系统和MongoDB 8.0.4版本。由于MongoDB 6版本之后&#xff0c;不再默认安装Mongo Shell&#xff0c;所以本节分为两部分&#xff1a;安装…