01 DTL 引擎的本质
def index(request):
# 获取模板文件
tpl = get_template('appo1/index.html')
# 获取数据
import time
dates = time.strftime("%X")
msg = {"html_msg":dates}
# 渲染数据
html = tpl.render(msg,request)
# 响应数据
return HttpResponse(html)
#优化一行代码
# return render(request,'appo1/index.html',{"html_msg":msg})
总结 获取模板文件,获取变量value,关联新的变量名,替换,封装成响应体,返回,
简化了操作步骤,把模板文件和变量之间的对应关系设置成函数的参数
类似于 js代码获取到document对象的value值,进行的赋值操作。
02 模板语法的深度查询
python语法的数据类型如何在模板文件中取值 ,
变量name == {{name}}
列表list = [1,2,22] == {{list.0 使用索引}}
字典dict = {name:'zhangsan'} == {{dict.name 使用键}}
对象object(title,hegit) == {{obj.title 使用键}}
def index(request):
name = '张三'
list_info = ["张三", 19, '三年级']
dict_info = {'姓名': "张三", '年龄': 18, '班级': "三年级"}
class User(object):
def __init__(self, name, age, levl):
self.name = name
self.age = age
self.levl = levl
def __str__(self):
return self.name
user1 = User('张三', 19, '3年级')
user2 = User('李四', 20, '1年级')
user3 = User('王五', 15, '2年级')
user_dict = [user1,user2,user3,]
return render(request, 'appo1/index.html', locals())
### 总结 locals 把该函数下的变量全部带入模板文件内, 尽量不要再生产环境中使用,变量多,影响性能。
![image-20230321145038265]()
03 模板语法的过滤器
过滤器的功能 是对传入模板文件变量的再处理机制,
django 提供的一种便捷的模板语法,对列表,集合等多元素变量的处理
索引的处理
大小写的字母的处理
时间的处理,
文件单位换算,
数字 运算 + add
js脚本的阻断 防止xss攻击
def index(request):
name = 'hello'
list_info = ["张三", 19, '三年级',"hello"]
import datetime
date = datetime.datetime.now()
file_size = 1111111111
context = '道可道,非常道'
link = '<a href="http://baidu.com">百度一下</a>'
dict_info = {'姓名': "张三", '年龄': 18, '班级': "三年级"}
class User(object):
def __init__(self, name, age, levl):
self.name = name
self.age = age
self.levl = levl
def __str__(self):
return self.name
user1 = User('张三', 19, '3年级')
user2 = User('李四', 20, '1年级')
user3 = User('王五', 15, '2年级')
user_dict = [user1,user2,user3,]
return render(request, 'appo1/index.html', locals())
![image-20230321173805213]()
04自定义过滤器
1、在setting.py 中的INSTALLED_APPS 中要注册应用
可以 # 'app01.apps.App01Config',
其他版本的django可以直接写 应用名称 # 'app01',
2、在自定义的应用内创建 过滤器的包文件,django默认不配置该目录,
创建templatetags 包目录--注意不是目录,django会自动前往这个目录下找过滤器
创建过滤器 my_filters.py 自定义的该应用下的过滤器,以应用名开头+文件名结尾 ,不同应用的文件名不能重名,会被覆盖
3、在文件中 把过滤器注册到django内,并且重启web服务
from django import template
register = template.Library()
@register.filter("mobil")
def mobil(content):
return content[3:]+"*****"+ content[-3:]
4、模板文件 加载 过滤器
{% load my %} # my 是过滤器所在的文件的名称,不要加py后缀名
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>姓名: {{ user_dict.0.name }}</p>
<p>手机号: {{ call_number|mobil}}</p>
</body>
</html>
# 实现手机号 中间5位数的以星号代替
![image-20230322150059791]()