10、 Django-模板-templates

news/2024/7/7 19:31:45/文章来源:https://www.cnblogs.com/littlecc/p/18115760

 

模板语法

#模板中的变量语法:{{ var }}如果变量不存在、则插入空字符串#方法不能有参数{{ int }}{{ str }}{{ list }}{{ list.0 }}{{ dict }}{{ dict.a }}        #dict['a']{{ func }}          #传递函数{{ class_obj.func }}    #传递类.方法#列表、使用索引、不允许负索引items= ['apples', 'banans', 'carrots']{{ items.2 }}#模板中的标签:if、for、while.......语法:{% tag %}作用:1、加载外部传入的变量2、在输出中创建问基本3、控制循环或逻辑#if语句#if单分支:{% if 表达式 %}语句{% endif %}#if双分支{% if 表达式 %}语句{% else %}语句{% endif %}#if多分枝{% if 表达式 %}语句{% elif 表达式 %}语句{% else %}语句{% endif %}#判断语句:true   false{% if today_is_weekend %}<p>为true输出的内容</p>{% endif %}#使用and  or   not{% if a and b %}{% if a or b %}{% if not list %}#使用in  和  not in{% if "bc" in "abcdef" %}<p>输出bc在abcdef中</p>{% endif %}{% if "gh" not in "abcdef" %}<p>输出gh不在abcdef中</p>{% endif %}

 

for循环

for语句:
{% for 变量 in 列表 %}语句
{% empty %}        #当列表为空时执行empty后面的语句语句
{% endfor %}#表示当前时第几次循环 :{{ forloop.counter }}
{% for item in todo_list %}<p>{{ forloop.counter }}:{{ item }}</p>     
{% endfor %}注意:
{{ forloop.counter0 }}    #表示当前时第几次循环,从0开始数
{{ forloop.revcounter }}    #表示当前时第几次循环,倒着数数、到1停
{{ forloop.revcounter0 }}    #表示当前时第几次循环,倒着数数、到0停
{{ forloop.first }}            #是否是第一次循环  返回布尔值
{{ forloop.last }}            #是否最后一次循环  返回布尔值如:
{% for link in links %}{{ link }}{{ %if not in forloop.last %}} | {% endif %}    
{% endfor %}

 

注释

#单行注释
{# 注释的内容 #}#多行注释
{% comment %}注释的内容
{% endcomment %}

 

过滤器

#语法
{{ var|过滤器 }}    #作用:在变量显示前修改add{{ value|add:2 }}    #变量+2
add{{ value|add:-2 }}    #没有减法的过滤去、但可以加负数{{ name|lower }}        #将字符串换成小写
{{ my_list|first|upper }}    #将列表中的第一个值标为大写{{ bio|truncatechars:30}}    #截断、将字符串截断30个字符#过滤器可以传递参数、参数需要使用引号括起来
如:{{ students|join:'=' }}#默认值default
{{ var|default:value }}    #如果变量没有被提供或者为false、空、会默认使用默认值#根据指定格式转换日期为字符串、处理时间的就是针对date进行的转换
{{ dateVal|date:'y-m-d' }}        #将日期对象dateVal转换为指定的日期格式

 

html的转义

#将接收到的数据当成普通字符串处理还是当成HTML代码来渲染的问题#如渲染成html
{{ code|safe }}#关闭自动转义
{% autoescape off%}code
{% endautoescape %}#打开自动转义
{% autoescape no%}code
{% endautoescape %}

 

模板的继承

block:{% block XXX%}code{% endblock %}extends继承、写在开头位置{% extends '父模板路径' %}include:加载模板进行渲染{% include '模板文件' %}{{ block.super }}    #获取父模板中block中的内容

 

案例:

views.py

from django.shortcuts import renderdef index(request):data = {'name': 'xiaoxin','age': 25,'likes': ['movie', 'game', 'code'],'address': {'city': '深圳', 'province': '广东'},'stars': [['黄师傅', '啊尧','温工'],['番薯', '柱子', '小赵'],['捷顺', '速通4', '道闸'],]}return render(request, 'index.html', data)        #使用render(request, html文件名, 传递的数据)  将数据传递给html模板

 

根路由:urls.py

from django.contrib import admin
from django.urls import path
from App_templates.views import *urlpatterns = [path('index/', index),path('admin/', admin.site.urls),
]

 

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>首页</title>
</head>
<body>  <h2>首页</h2><hr>{# 单行注释 #}{% comment %}多行注释{% endcomment %}{# 打印变量 #}<p>name: {{ name }}</p><p>age: {{ age }}</p>{#  取列表的值 需要  列表.下标  #}<p>likes: {{ likes }}</p><p>likes.2: {{ likes.2 }}</p>   {#  取字典的value需要    字典.key  #}<p>address: {{ address }}</p><p>address: {{ address.city }}</p><hr>{#   标签的使用   #}<h3>if语句</h3><h4>单分支</h4>{# 这里的  >= 符号两边需要有空格不然语法会报错   #}{% if age >= 18 %}<p>{{ name }} 已成年</p>{% endif %} <h4>双分支</h4>{% if age >= 18 %}<p>{{ name }} 已成年</p>{% else %} <p>{{ name }} 未成年</p>{% endif %}<h4>多分支</h4>{% if age < 18 %}<p>{{ name }} 未成年</p>{% elif age < 60 %}<p>{{ name }} 是猛男</p>{%  else %}<p>{{ name }} 是老年人</p>{% endif %} <h4>结合运算符 and、or、in、not in、not等等</h4>{% if age > 18 and age < 60 %}<p>{{ name }} 是成年</p>{% endif %}<hr><h3>for循环</h3>{% for like in likes %}<p>{{ like }}</p>{% endfor %}<h4>empty</h4>{% for like in likes2 %}<p>{{ like }}</p>{% empty %}<p>likes2 为空或者不存在</p>{% endfor %}<h4>下标</h4>{% for like in likes %}<p>counter0:{{ forloop.counter0 }},counter:{{ forloop.counter }},revconuter0:{{ forloop.revcounter0 }},revcounter:{{ forloop.revcounter }},{#  在第一次循环的后面 加上 -first #}{% if forloop.first %}      <b>- first</b>{% endif %} {#  在最后一次循环的后面 加上 -last #}{% if forloop.last %}<b>- last</b>{% endif %} </p>{% endfor %}<h4>循环嵌套</h4>{#  表格标签  border="1":表格线宽、 width:表格宽度#}<table border="1" width="300">    {% for star in stars %}<tr>{% for s in star %}<td>{{ s }}-{{ forloop.parentloop.counter }}-   {# 拿到当前循环的上一个循环体的值 #}{{ forloop.counter }}           {# 拿到当前循环体的值 #}</td>{% endfor %}</tr>{% endfor %}</table><h3>过滤器</h3><h4>数字加减</h4><p>age = {{ age }}</p><p>age | add:2= {{ age|add:2 }}</p><p>age | add:-2 =  {{ age|add:-2 }}</p><h4>字符大小写转换</h4><p>name = {{ name }}</p><p>name|first|upper = {{ name|first|upper }}</p><p>name|last|upper = {{ name|last|upper }}</p><p>name|title = {{ name|title }}</p>        {# 标题:将第一个字符换成大写 #}<h4>截断</h4><p>name|truncatechars:4 = {{ name|truncatechars:4 }}</p>    {# 截取字符串前4-1个字符 #}<h4>拼接 join</h4><p>likes = {{ likes }}</p><p>likes|join:'+' = {{ likes|join:'+' }}</p>    {# 将列表中的元素使用 + 号拼接起来 #}<h4>default:默认值 前提是变量为空没有值</h4><p>likes2 = {{ likes2 }}</p>    {# 这里的likes2 是空值没有定义 #}<p>linkes2|default:'xjxj' = {{ likes2|default:'xjj' }}</p><h4>指定日期格式</h4><p>dt = {{ dt }}</p><p>dt = {{ dt|date:'Y-m-d' }}</p><hr><h4>html转义</h4><p>code = {{ code }}</p>    {# 输出没有转义前的 #}<p>code = {{ code|safe }}</p>   {# 输出转义后的html格式 、就是去掉html的标签、只输出字符串 #}<hr><h4>自动转义</h4><p>{# 打开自动转义 #}</p>{% autoescape off%}         {# 打开自动转义 #}{{ code }}{% endautoescape %}<p>{# 关闭自动转义 #}</p>{% autoescape on%}         {# 关闭自动转义 #}{{ code }}{% endautoescape %}
</body>
</html>

 

 

模板的继承

views.py

#模板继承、子模板继承父模板#父模板
def base(request):return render(request, 'base.html')#字模板
def music(request):return render(request, 'music.html')#子模板
def sport(request):return render(request, 'sport.html')

urls.py

from django.contrib import admin
from django.urls import path
from App_templates.views import *urlpatterns = [path('base_index/', base),path('music_index/', music),path('sport_index/', sport),
]

base.html  --父模板

<!DOCTYPE html>
<html lang="en">
<head><!-- meta:设置编码 --><meta charset="UTF-8"><!-- title:标题  block:块  endblock:结束块-->{% block mytitle %}<title>主页</title>{% endblock %}</head>
<body><!-- a:链接  href=urls中的路由--><a href="/music_index">音乐频道</a><a href="/sport_index">体育频道</a><br><!-- block:块  endblock:结束块 这个是被子模板继承后可以修改的地方-->{% block info %}这是主页{% endblock %}<br><h3>有任何问题联系xxxxx</h3></body>
</html>

 字模板-music.html


<!-- 直接继承父模板 base.html -->
{% extends 'base.html' %}<!-- block:块 修改父模板中block块中的内容  重写-->
{% block mytitle %}<title>音乐频道</title>
{% endblock %}{% block info %}欢迎来到音乐频道
{% endblock %}

子模板- sport.html


<!-- 直接继承父模板 base.html -->
{% extends 'base.html' %}<!-- block:块 修改父模板中block块中的内容  重写-->
{% block mytitle %}<title>体育频道</title>
{% endblock %}{% block info %}欢迎来到体育频道
{% endblock %}

 

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

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

相关文章

Simple WPF: WPF 透明窗体和鼠标事件穿透

一个自定义WPF窗体的解决方案,借鉴了吕毅老师的WPF制作高性能的透明背景的异形窗口一文,并在此基础上增加了鼠标穿透的功能。可以使得透明窗体的鼠标事件穿透到下层,在下层窗体中响应。一个自定义WPF窗体的解决方案,借鉴了吕毅老师的WPF制作高性能的透明背景的异形窗口一文…

VMware安装Win11环境

准备 Win11的iso镜像 下载链接:https://www.microsoft.com/zh-cn/software-download/windows11/?open_in_browser=true 配置步骤 步骤一——创建虚拟机 1、点击创建新虚拟机2、使用典型模式3、选择镜像位置4、选择虚拟机存放位置5、输入密码,此密码可以随便写6、选择单个文件…

2、爬虫-安装anaconda工具

1、官网:https://www.anaconda.com/download-success2、一直下一步安装即可 3、打开4、输入:jupyter notebook 打开有一个浏览器的界面 5、右上角点击new新建python3(ipykernel)本文来自博客园,作者:little小新,转载请注明原文链接:https://www.cnblogs.com/littlecc/…

50、k8s-DashBoard(k8s的web)-部署

1、下载yaml文件:https://github.com/kubernetes/dashboard/blob/v2.0.0/aio/deploy/recommended.yaml 2、修改yaml文件的service 配置: --------------------------------------------- ---kind: Service apiVersion: v1 metadata:labels:k8s-app: kubernetes-dashboardname…

[JLU] 数据结构与算法上机题解思路分享-第二次上机

这是吉林等通知大学数据结构与算法上机题的题解思路,没有精妙的解法,只是一个记录罢前言 首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。 这里只是思路解析的博客,代码仓库在 JLU_Data_Structures_Record 希望你能在这里找到你想要…

docker 基础学习--尚硅谷教程

1、新建、启动容器docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 2、列出当前所有正在运行的容器docker ps [OPTIONS] 3、退出容器4、重启、退出、删除容器 5、启动守护式容器 docker 常见命令

Bruno安装使用

下载地址直接解压,右键Bruno.exe创建快捷方式创建集合右键集合,New Request指定名称和url指定参数保存并测试

《与光重聚》 —— 属于他的夏日花火

题目是歌曲名称,from 《夏日花火》 (国产galgame ; 视觉小说「夏日花火」原声音乐集 - dizzylab PV视频 因为被平衡树制裁了,所以心血来潮写这篇文章,姑且算是练笔吧(毕竟好久不写鲜花了; 游戏本体发行时间:2022年10月28日,目前无DLC(永远的遗憾; 游戏背景设计是D…

玄机-第一章 应急响应-Linux日志分析

玄机-第一章 应急响应-Linux日志分析 账号root密码linuxrz ssh root@IP 1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割 2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割 3.爆破用户名字典是什么?如果有多个使用","分割 4.登陆…

使用 .NET 构建 UI 界面的各种方式

微软搞出了很多构建 UI 程序的框架,如 WinForms WPF WinUI MAUI,他们之间的简单对比可以看如下这篇官方文档 Overview of framework options - Windows apps | Microsoft Learn 本文主要是记录一下在搜索相关问题时,了解到的内容,不一定准确,如果发现错误,请留言补充。 1…

Docker详细安装教程

安装Docker: # 1,, 卸载旧的版本# 2,需要的安装 yum install -y yum-utils# 3, 设置镜像的仓库 https://blog.csdn.net/qq_43168442/article/details/116770163 (访问这个博客网站进行配置)# 更新yum软件包索引 yum makecache fast# 4,安装docker docker-ce 社区 ee企业…

详细讲解 Keil Pack Installer,以及通过 Keil 官网获取 Pack

前言 大家好,我是梁国庆。 收到粉丝留言,说 Keil 安装 Pack 不太明白,可不可以详细演示一下?当然可以有,直接视频+文章全部安排,我就是宠粉。 PS:第一次录视频有些紧张,见谅哈。微信视频号:https://weixin.qq.com/sph/AXbpYwEaw b站:https://www.bilibili.com/video…

webdav协议及我的笔记方案(私有部署)

背景 用markdown用于文章写作,有几年时间了,不是很喜欢折腾,主要就是在电脑上写,用的笔记软件就是typora。由于里面有很多工作相关的,以及个人资料相关的(包含了各种账号、密码啥的),所以不敢往各种云服务上放,还是想着数据由自己来管着。 自己管数据的话,就是数据存…

模拟集成电路设计系列博客——8.3.2 PLL中的抖动与相位噪声

8.3.2 PLL中的抖动与相位噪声 在PLL中有若干种抖动源,具体来说包括:输入参考的抖动\(\phi_{in}\) VCO中的抖动 环路滤波器产生的噪声 分频器产生的噪声由于任何实际PLL中的抖动都相对较小,因此分析其在环路中和环路内的传播可以使用线性小信号模型。上面列出的噪声源出现在环…

【git】github如何上传超过100MB大小的单个文件

在使用 GitHub 进行版本控制时,默认情况下,单个文件的大小限制为 100MB。 如果你需要上传超过这个大小的文件,可以使用 Git LFS(Large File Storage)。 Git LFS 是一种 Git 扩展,专门用于处理大文件,它将大文件替换为轻量级的指针,并将实际的文件内容存储在远程服务器上…

ros2 - microros - 雷达 -可视化点云

上一节完成了指定角度距离的测量这一节我们将其合成ROS的laserscan消息,并将其通过microros发布到上位机,最终实现rviz2的可视化。 一、雷达消息介绍使用指令ros2 interface show sensor_msgs/msg/LaserScan,可以看到ROS2对雷达数据接口的定义。# Single scan from a planar…

玄机流量特征分析-蚁剑流量分析

玄机流量特征分析-蚁剑流量分析 1.木马的连接密码是多少 2.黑客执行的第一个命令是什么 3.黑客读取了哪个文件的内容,提交文件绝对路径 4.黑客上传了什么文件到服务器,提交文件名 5.黑客上传的文件内容是什么 6.黑客下载了哪个文件,提交文件绝对路径1.过滤http,发现连接密码…

F407在RAM中调试

在RAM中调试代码 一.软硬件操作 硬件方面需要先修改BOOT0和BOOT1的引脚的高低电平。SRAM运行模式BOOT0和BOOT1都是高电平。软件方面: 1.需要先取消勾选Use Memory Layout from Target Dialog,点击下方的Edit编辑.sct2.修改.sct分散加载文件 原始文件 LR_IROM1 0x08000000 0x0…

制作badusb上线CS

‍ 前言在2014年美国黑帽大会上,安全研究人员JakobLell和独立安全研究人员Karsten Nohl展示了他们称为“BadUSB”的攻击方法,这种攻击方法让USB安全和几乎所有和USB相关的设备(包括具有USB端口的电脑)都陷入相当危险的状态现在的USB设备很多,比如语音视频设备、摄像头等,因…

【数据结构】常见的几种数据结构

常见的数据结构:数组、链表、队列、栈、、堆、二叉树、B树、哈希表、图 数组 因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来。根据索引查找元素,时间复杂度是 \(O(1)\)。 动态数组动态数组具体代码实现 import java.util.Arrays; import java…