Django模板层
模板层传输数据
前端可以通过反向解析的方法发送数据到后端
后端可以再返回页面的时候携带数据一并返回
前端语法:
{{}}:主要与数据值相关
{%%}:主要与逻辑相关
前端html文件中可以使用
{{获取到后端传送的数据}}
<p> {{ name }} </p>
<p> {{ age }} </p>
<P> {{ list.1}} </p>
针对可以进行索引取值的数据 可以通过.数字的方法进行索引取值
给后端发送数据
<a href="{% url 'a01' '123' %}">点我</a>
# 跳转到 别名为 a01的路由 顺便给这个路由对应的函数 传递参数123
后端python文件中
#方式一:
def login(request):
name = '张无忌'
age = 22
return render(request,'login.html',{'name'=name})
#精准传值 不浪费资源 针对多资源的传递书写麻烦 优点:不浪费资源
#方式二:关键词 locals()
def login(request):
name = '张无忌'
age = 22
return render(request,'login.html',locals())
#将方法中所有的变量名与值全部和html文件一起传送过去
#优点方便一下传所有 缺点不够精准 浪费资源
后端传值特性
1.基本数据类型都可以传递
2.对象也可以传
3.文件对象也可以展示并调用方法
4.函数名会自动加括号执行并将返回值展示到页面上(不支持额外传参)
5.类名也会自动加括号调用
ps:总结针对可以加括号调用的名字模板语法都会自动加括号调用
模板层之过滤器
在Django的模板语言中,通过使用 过滤器 来改变变量的显示
使用管道符"|"来应用过滤器
1.{{ name|length }}
返回value的长度,如 name='moon'的话,就显示4.
2.{{ value|filesizeformat }}
如果 value 是 123456789,输出将会是 117.7 MB。
#接收后端返回的文件大小,自动转换为最佳的显示单位
3.{{value|slice:"0:5"}}
对数据进行切片展示 索引0-5
4.{{ value|date:"Y-m-d H:i:s"}}
可以对时间进行格式化展示 '2022-01-19 18:12:23'
5.{{ value|safe}}
后端返回的值为前端标签时 控制是否直接展示
6.{{ value|truncatechars:9}}
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。
参数:截断的字符数
7.{{ value|truncatewords:9}}
在一定数量的字后截断字符串。
8.{{ value|cut:' ' }}
移除value中所有的与给出的变量相同的字符串
如果value为'i love you',那么将输出'iloveyou'.
模板层之标签
在django项目中 模板层可以进行 for循环 和 if判断逻辑运算
if,elif和``else
if,elif和else
{% if name == '张无忌' %}
<P>乾坤大挪移</P>
{% elif name == '周芷若' %}
<p>九阴白骨爪</p>
{% else %}
<p>路过....</p>
{% endif %}
# if 变量名name 等于 张无忌的话 执行 <P>乾坤大挪移</P>
# 变量名name 等于 周芷若的话 执行 <P>九阴白骨爪</P>
# 变量名不是张无忌/周芷若 执行 else <p>路过....</p>
{% if user_list|length > 5 %}
七座豪华SUV
{% else %}
黄包车
{% endif %}
# 判断变量名 user_list 列表数量是否 大于5
if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
{% with d1.hobby.2.a1 as h %} 复杂数据获取之后需要反复使用可以起别名
<a href="">{{ h }}</a>
{% endwith %}
for循环
普通for循环
<u1>
{% for user in user_list %}
<li>{{user.name}}</l1>
{% endfor %}
</u1>
# 使用临时变量user名 遍历 user_list列表,代表列表内每一个用户对象
更多方法
{% for k in t1 %}
{% if forloop.first %}
<p>这是我的第一次循环{{ k }}</p>
{% elif forloop.last %}
<p>这是我的最后一次循环{{ k }}</p>
{% else %}
<p>这是中间循环{{ k }}</p>
{% endif %}
{% empty %}
<p>你给我传的数据是空的无法循环取值(空字符串、空列表、空字典)</p>
{% endfor %}
forloop.counter 当前循环的索引值(从1开始)
forloop.counter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是不是第一次循环(布尔值)
forloop.last 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环
模板的继承与导入
设置母版
如果我们有很多前端页面长得有很多相似的地方 我们可以采用继承的方法
模板的继承:
1.先确认一个母版 在母版中划分那些是不变的,哪些是可以变的
<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 %}
# 母版设置可以改变的部分 可以设置多个
# 以 {% block 区域名称 %}开始
# {% endblock %} 结尾 划分一片可以改变的区域
{% endblock %}
</head>
<body>
<h1>这是母板的标题</h1>
{% block page-main %}
# 又是一个可以改变的区域 区域名称为 page-main
{% endblock %}
<h1>母板底部内容</h1>
{% block page-js %}
# 又是一个可以改变的区域 区域名称为 page-js
{% endblock %}
</body>
</html>
ps:模板中至少应该有三个区域可以改变
页面内容区、css样式区、js代码区
子板继承母版
新建html文件 不需要任何内容
直接继承母版
{% extends '母版文件名' %}
eg:{% extends 'home.html' %}
然后直接在内容区域编写改变的代码
{% block 母版可修改位置 %}
# 正常母版有3个可以修改的位置
{% endblock %}
ps:模板中至少应该有三个区域
页面内容区、css样式区、js代码区
分类:
Django教程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了