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…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
 
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
 
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
 
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
 
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
 
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
 
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
