系列文章目录
前言
上一章说过,rander函数为什么叫做是渲染页面,这一章就对django中渲染模板进行揭秘,看看模板的渲染是有多么神奇
一、模板语法
模板如果只是一个静态的HTML文件的话,会不会太僵硬了呢?如果我一个商城页面有1024页的商品,是不是要写1024个页面供用户浏览呢?模板语法很好地解决了这个问题
1.简单数据的渲染
后端代码,把需要渲染的数据通过context传到render方法中
def demo02(req):
data = {
'temp': '这是一个变量',
'list': ['列表一号成员', '列表二号成员'],
'dict': {'username': '字典', 'password': 'zidian'},
}
return render(req, 'dome02.html', context=data)
前端代码,把需要渲染的数据使用双大括号包裹起来,里面填上变量名,字典的话通过.索引来取值,字典通过.键名来取值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这是一个模板</title>
</head>
<body>
普通变量的渲染:{{temp}}<br>
<hr>
列表数据的渲染:{{list.0}}<br>{{list.1}}<br>
<hr>
字典数据的渲染:{{dict.username}}<br>{{dict.password}}<br>
<hr>
</body>
</html>
2.通过函数进行数据的渲染渲染
for循环遍历
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这是一个模板</title>
</head>
<body>
普通变量的渲染:{{temp}}<br>
<hr>
列表数据的渲染:{{list.0}}<br>{{list.1}}<br>
<hr>
字典数据的渲染:{{dict.username}}<br>{{dict.password}}<br>
<hr>
通过函数进行列表的渲染:{%for i in list%}{{i}}<br>{%endfor%}
<hr>
通过函数进行字典的渲染:{%for k,v in dict.items%}{{k}}:{{v}}<br>{%endfor%}
<hr>
</body>
</html>
在使用{%for%}语句时候不要忘记在循环结束要加一个{%endfor%}代表循环的结束
ifelse判断
这里1代表真,0代表假,你可以换成自己的判断条件,支持and,or
判断:{%if 0%}真{%else%}假{%endif%}
<hr>
效果:
3.使用过滤器
过滤器就相当于在数据加载之前对数据做了一个处理,比如我在k后面加一个|upper,就代表在渲染之前把数据替换为大写字母再进行渲染
可以多次过滤 django内置了好像有60多种过滤器,有兴趣可以了解一下
常用过滤器:
first第一个元素
upper全部大写
lower全部小写
add:变量名
length长度
filesizeformat文件大小格式化 1024==1.0kb
date:“y-m-d”
4.模板的继承
在父模板创建一个块
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>继承的父模板</title>
</head>
<body>
{%block 模板名%}
这里是模板的内容
{%endblock 模板名%}
</body>
</html>
在子模板中使用块名去重写父元素块中的内容,并且要在第一行表示要继承那个文件
效果:
总结
使用模板可以让我们在给用户返回静态页面之前进行动态的渲染,渲染过后返回给用户,可以减少很多重复的前端页面的存放,减少了储存空间的占用,也可以在之后可以更好的去管理网站的内容。