Django之模版层
目录
一、常用语法
二、模版语法之变量
三、模板之过滤器(Filters)
【1】default
【2】length
【3】filesizeformat
【4】slice
【5】date
【6】safe
【7】truncatechars
【8】其它过滤器(了解)
四、模版之标签
【1】for标签
【2】if 标签
【3】with
【4】csrf_token
五、模版导入和继承
【1】模版导入
【2】模版继承
一、常用语法
- 只需要记两种特殊符号:
{{ }}和 {% %}
- 变量相关的用{
- 逻辑相关的用{%%}
二、模版语法之变量
- 在Django的模板语言中按此语法使用:
- {{ 变量名 }}。
- 当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身。
- 变量的命名包括任何字母数字以及下划线 ("_")的组合。
- 变量名称中不能有空格或标点符号。
- 在模板中取值的时候:使用的是点语法(.)
- 模板中得函数调用的时候不要加括号,自动加括号,你只需要写函数名
- Python的数据类型基本都支持放到模板中使用
模板中支持的写法:
{# 取l中的第一个参数 #}
{{ l.0 }}
{# 取字典中key的值 #}
{{ d.name }}
{# 取对象的name属性 #}
{{ person_list.0.name }}
{# .操作只能调用不带参数的方法 #}
{{ person_list.0.dream }}
三、模板之过滤器(Filters)
过滤器给我们提供的有六十多个,但是我们只需要掌握10个以内即可。
语法:
{{obj|filter__name:param}} 变量名字|过滤器名称:变量
【1】default
- 如果一个变量是false或者为空,使用给定的默认值。
- 否则,使用变量的值。
{{ value|default:"nothing"}}
- 如果value没有传值或者值为空的话就显示nothing
【2】length
- 返回值的长度。它对字符串和列表都起作用。
{{ value|length }}
- 返回value的长度
- 如 value=['a', 'b', 'c', 'd']的话,就显示4。
【3】filesizeformat
- 将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。
{{ value|filesizeformat }}
- 如果 value 是 123456789,输出将会是 117.7 MB。
【4】slice
- 切片
- 如果 value=”hello world”
{{ value|slice:"2:-1"}}
【5】date
- 格式化
-
如果 value=datetime.datetime.now()
-
{{ value|date:"Y-m-d H:i:s"}}
【6】safe
- Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。
- 但是有的时候我们可能不希望这些HTML元素被转义
- 比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。
- 为了在Django中关闭HTML的自动转义有两种方式
- 如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。
- 比如:
- value = "点我"
value="<a href="">点我</a>"
{{ value|safe}}from django.utils.safestring import mark_safe
res = mark_safe('<h1>HELLO WORLD</h1>')
【7】truncatechars
- 如果字符串字符多于指定的字符数量,那么会被截断。
- 截断的字符串将以可翻译的省略号序列(“...”)结尾。
- 参数:截断的字符数
{{ value|truncatechars:9}}
【8】其它过滤器(了解)
| 过滤器 | 描述 |
| upper | 以大写方式输出 |
| add | 给value加上一个数值 |
| addslashes | 单引号加上转义号 |
| capfirst | 第一个字母大写 |
| center | 输出指定长度的字符串,把变量居中 |
| cut | 删除指定字符串 |
| date | 格式化日期 |
| default | 如果值不存在,则使用默认值代替 |
| default_if_none | 如果值为None, 则使用默认值代替 |
| dictsort | 按某字段排序,变量必须是一个dictionary |
| dictsortreversed | 按某字段倒序排序,变量必须是dictionary |
| divisibleby | 判断是否可以被数字整除 |
| escape | 按HTML转义,比如将”<”转换为”<” |
| filesizeformat | 增加数字的可读性,转换结果为13KB,89MB,3Bytes等 |
| first | 返回列表的第1个元素,变量必须是一个列表 |
| floatformat | 转换为指定精度的小数,默认保留1位小数 |
| get_digit | 从个位数开始截取指定位置的数字 |
| join | 用指定分隔符连接列表 |
| length | 返回列表中元素的个数或字符串长度 |
| length_is | 检查列表,字符串长度是否符合指定的值 |
| linebreaks | 用或标签包裹变量 |
| linebreaksbr | 用标签代替换行符 |
| linenumbers | 为变量中的每一行加上行号 |
| ljust | 输出指定长度的字符串,变量左对齐 |
| lower | 字符串变小写 |
| make_list | 将字符串转换为列表 |
| pluralize | 根据数字确定是否输出英文复数符号 |
| random | 返回列表的随机一项 |
| removetags | 删除字符串中指定的HTML标记 |
| rjust | 输出指定长度的字符串,变量右对齐 |
| slice | 切片操作, 返回列表 |
| slugify | 在字符串中留下减号和下划线,其它符号删除,空格用减号替换 |
| stringformat | 字符串格式化,语法同python |
| time | 返回日期的时间部分 |
| timesince | 以“到现在为止过了多长时间”显示时间变量 |
| timeuntil | 以“从现在开始到时间变量”还有多长时间显示时间变量 |
| title | 每个单词首字母大写 |
| truncatewords | 将字符串转换为省略表达方式 |
| truncatewords_html | 同上,但保留其中的HTML标签 |
| urlencode | 将字符串中的特殊字符转换为url兼容表达方式 |
| urlize | 将变量字符串中的url由纯文本变为链接 |
| wordcount | 返回变量字符串中的单词数 |
四、模版之标签
- 标签看起来像是这样的: {% tag %}
- 标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加载其后的变量将使用到的额外信息到模版中。
- 一些标签需要开始和结束标签 (例如{% tag %} ...标签 内容 ... {% endtag %})
【1】for标签
遍历每一个元素:
{% for person in person_list %}<p>{{ person.name }}</p>
{% endfor %}# 可以利用{% for obj in list reversed %}反向完成循环。
遍历一个字典:
{% for key,val in dic.items %}<p>{{ key }}:{{ val }}</p>
{% endfor %}{% for foo in d.keys %}<p>{{ foo }}</p>
{% endfor %}{% for foo in d.values %}<p>{{ foo }}</p>
{% endfor %}{% for foo in d.items %}<p>{{ foo }}</p>
{% endfor %}
注:循环序号可以通过{{forloop}}显示
# for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作。
{% for person in person_list %}<p>{{ person.name }}</p>{% empty %}<p>sorry,no person here</p>
{% endfor %}
【2】if 标签
- {% if %}会对一个变量求值,如果它的值是True(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
- if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
{% if num > 100 or num < 0 %}<p>无效</p>
{% elif num > 80 and num < 100 %}<p>优秀</p>
{% else %}<p>凑活吧</p>
{% endif %}
【3】with
- 定义一个中间变量,多用于给一个复杂的变量起别名。
- 注意等号左右不要加空格。
d = {'username':'kevin','age':18,'info':'这个人有点意思','hobby':[111,222,
333,{'info':'NB'}]}# with起别名
{% with d.hobby.3.info as nb %}<p>{{ nb }}</p>在with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式<p>{{ d.hobby.3.info }}</p>
{% endwith %}{% with total=business.employees.count %}{{ total }} employee{{ total|pluralize }}
{% endwith %}
不要写成as
【4】csrf_token
{% csrf_token%}
五、模版导入和继承
【1】模版导入
语法:{% include '模版名称' %}如:{% include 'adv.html' %}
母板
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Title</title>{% block page-css %}{% endblock %}
</head>
<body><h1>这是母板的标题</h1>{% block page-main %}{% endblock %}
<h1>母板底部内容</h1>
{% block page-js %}{% endblock %}
</body>
</html>
注意:我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。
【2】模版继承
- 在子页面中在页面最上方使用下面的语法来继承母板。
{% extends 'layouts.html' %}
块(block)
- 通过在母板中使用
{% block xxx %}来定义"块"。 - 在子页面中通过定义母板中的block名来对应替换母板中相应的内容。
{% block page-main %}<p>世情薄</p><p>人情恶</p><p>雨送黄昏花易落</p>
{% endblock %}
组件
- 可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。
{% include 'navbar.html' %}相关文章:
Django之模版层
目录 一、常用语法 二、模版语法之变量 三、模板之过滤器(Filters) 【1】default 【2】length 【3】filesizeformat 【4】slice 【5】date 【6】safe 【7】truncatechars 【8】其它过滤器(了解) 四、模版之标签 【1】for标签 【2】if 标签…...
spark性能调优 | 内存优化
目录 我们先了解一下有哪些内存温馨提示RDD示范(spark版本2.1.1)RDD进行优化Df和Ds进行示范 我们先了解一下有哪些内存 1.storage内存 存储数据,缓存 可预估2.shuffle内存 计算join groupby 不可预估spark1.6之前 静态管理的,spark1.6之…...
【PG】PostgreSQL高可用之自动故障转移-repmgrd
前言 上面的几篇文章介绍了repmgr的部署,手动进行 从节点提升,主从切换,孤立从从节点找到新的主库等操作,但是都是需要通过手动去执行命令。大家都知道,在线上生产环境中数据库每秒钟的不可用都会造成严重的事故&am…...
操作系统OS/存储管理/内存管理/内存管理的主要功能_基本原理_要求
基本概念 内存管理的主要功能/基本原理/要求 **内存管理的主要功能: ** 内存空间的分配与回收。由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。地址转换。在多道程序环境下,程序中的逻辑地…...
【手写数据库toadb】SQL解析器的实现架构,create table/insert 多values语句的解析树生成流程和输出结构分析
SQL解析器架构和实现 专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方…...
设计模式-备忘录模式-笔记
动机(Motivation) 在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节…...
机器学习—基本术语
目录 1.样本(示例) 2.属性 3.属性值 4.属性空间 5.样本空间 6.学习(训练) 7.数据集 8.测试 9.假设 10.学习器 11.标记 12.样例 13.标记空间(样例空间) 14.分类与回归 15.有监督学习、无监督…...
pytorch单精度、半精度、混合精度、单卡、多卡(DP / DDP)、FSDP、DeepSpeed模型训练
pytorch单精度、半精度、混合精度、单卡、多卡(DP / DDP)、FSDP、DeepSpeed(环境没搞起来)模型训练代码,并对比不同方法的训练速度以及GPU内存的使用 代码:pytorch_model_train FairScale(你真…...
基于PHP的纺织用品商城系统
有需要请加文章底部Q哦 可远程调试 基于PHP的纺织用品商城系统 一 介绍 此纺织用品商城系统基于原生PHP开发,数据库mysql,前端bootstrap。用户可注册登录,购物下单,评论等。管理员登录后台可对纺织用品,用户…...
Go使用命令行输出二维码
引言 二维码(QR code)是一种矩阵条码的标准,广泛应用于商业、移动支付和数据存储等领域。在开发过程中,我们可能需要在命令行中显示二维码,这可以帮助我们快速生成和分享二维码信息。本文将介绍如何使用Go语言生成二维…...
最长连续序列[中等]
优质博文:IT-BLOG-CN 一、题目 给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。 示例 1: 输入:nums […...
设计模式-状态模式-笔记
状态模式State 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供了一种解决方案。 经典模式:State、Memento 动机(…...
Java中for、foreach、stream区别和性能比较
文章目录 性能比较区别使用方式和行为 性能比较 最终总结:如果数据在1万以内的话,for循环效率高于foreach和stream;如果数据量在10万的时候,stream效率最高,其次是foreach,最后是for。另外需要注意的是如果数据达到10…...
[CSS] 文本折行
文本折行一般分为两种情况: CJK(Chinese/Japanese/Korean) 字符和非 CJK 字符。一般非 CJK 字符折行发生在两个单词的空格中间,见下图: 图中文本 “hello world” 包裹容器的宽度为 2rem,但是 hello 并没有…...
033-从零搭建微服务-日志插件(一)
写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…...
短期经济波动:均衡国民收入决定理论(三)
短期经济波动:国民收入决定理论(三) 文章目录 短期经济波动:国民收入决定理论(三)[toc]1 总需求曲线及其变动1.1 总需求曲线含义1.2 总需求曲线推导1.2.1 代数推导1.2.2 几何推导 1.3 AD曲线及其变动1.3.1 扩张性财政政策1.3.2 扩张性货币政策 2 总供给曲…...
电力感知边缘计算网关产品设计方案-网关软件架构
边缘计算网关采用ARM定制硬件平台架构,包含上位机端(内网)和FPGA网关端(外网)两部分,通过芯片间的高速信号总线实现边缘计算网关工业数据采集、数据实时传输、数据存储、网关状态信息收集等功能。 边缘计算网关上位机端(内网)重点完成工业数据采集、业务软件运算、客户…...
最新AI创作系统ChatGPT系统运营源码/支持最新GPT-4-Turbo模型/支持DALL-E3文生图
一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...
Java使用Redis的几种客户端介绍
Redis是一种高性能的内存数据库,可以提供快速的数据读写操作。在Java中使用Redis,需要使用Redis客户端。目前,Java中常用的Redis客户端有以下几种: Jedis Jedis是Java中最流行的Redis客户端之一,它提供了丰富的API和…...
程序员的护城河
程序员的护城河 算法,一定是过硬的算法!!!举个栗子:算法不硬吃大亏写在最后 算法,一定是过硬的算法!!! 其实会什么技术不重要,掌握多少种编程语言也不重要&a…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
