004 django的模板语法 数据类型的使用

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

posted @ 2023-03-21 18:00  mmszxc  阅读(43)  评论(0)    收藏  举报