zoukankan      html  css  js  c++  java
  • 十、前端tag、自定义tag、filter和simple_tag

    Django提供了一些函数,通过前端可以实现代码逻辑、字符串的处理等功能,一些复杂的功能如数据合法性判断、非法字符的过滤等可以通过后台代码实现前端自定义函数。

    django提供了两种方法为前端实现自定义函数,分别是filter和simple_tag.

    一、前端tag

    后台代码

    def test(request):
    '''定义一些变量给前端使用''' import datetime cur_time
    = datetime.datetime.now() age = 18 name = 'marry' article_content = 'django有自带的分页,非常的好用,代码如下:django有自带的分页,非常的好用,代码如下:django有自带的分页,非常的好用,代码如下:' navs = ["我的日记a","我的相册",'我的心情','我的心情1','我的心情2','我的心情3'] comments = '<h1 style="font-size:200px">你好呀</h1>' h1_str = '<p style="font-size:98px">哼哼哼离嘛哼</p>' js_str="<script>alert('哈哈哈哈')</script>" article_content2 = "敏感词哼哼哼哼这是一个敏感词。。。" say = "今天天黑得很早,没有星星也没有月亮,然后天空被展开成了二维空间。" return render(request,'test.html',locals()) #locals()返回所有的变量,就不用使用字典一个一个的加了

    前端代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {{ age|add:"1" }} {# add加,int类型做加法 #}
    <br>
    {{  name|add:" 先生"|upper }} {# 字符串在后面加一个字符串 #}
    <br>
    {{ comments }}
    <br>
    ----长度{{ navs|length }}
    <br>
    ----{{ navs.0 }}
    <br>
    {{ article_content|truncatechars:"20" }}
    {#截断字符串的,多余的字符串用...显示#}
    <br>
    
    {{ navs|slice:"0:3" }}{# slice切片,两个参数 #}
    {#切片#}<br>
    {#切片#}<br>
    {#切片#}<br>
    
    {{ navs|join:"" }}{# 以","连接这个list#}
    <br>
    {{ author |default:"管理员" }} {# default默认值 #}
    <br>
    {{ cur_time|date:'Y/m/d H:i:s' }} {# 时间格式化 #}
    <br>
    
    <br>
    {{ name|upper }} {# 大写 #}
    {{ name|lower }} {# 小写 #}
    <br>
    
    {{ h1_str |safe}} {# safe被认为安全的代码,会根据标签进行解析,如果不加safe则按字符串输出,不会被解析#}
    
    {{ js_str|safe }}
    {#如果后面加了safe的话,认为这个是安全的字符串,浏览器会按照标签解析#}
    {#如果不加safe的话,就是一个普通的字符串,就不会按照标签解析#}
    
    </body>
    </html>
    1、前端使用变量
    {{ age }} {#后端的变量使用两个大括号括起来,可直接使用#}
    2、truncatechars截断字符串
    {{ article_content|truncatechars:"20" }} {#truncatechars 截断字符串,只显示20个,多余的字符串用...显示#}
    3、slice切片
    {{ navs|slice:"0:3" }}{# slice切片,两个参数 #}
    4、upper大写、lower小写
    {{ name|upper }} {# 大写 #}
    {{ name|lower }} {# 小写 #}
    5、join连接字符串
    {{ navs|join:"====" }} {# 以","连接这个list#}
    6、default默认值
    {{ author |default:"管理员" }} {# default默认值 #}
    7、时间格式化
    {{ cur_time|date:'Y/m/d H:i:s' }} {# 时间格式化 #}
    8、css注入、js注入
    {{ h1_str |safe}}
    {{ js_str|safe }}
    {#如果后面加了safe的话,认为这个是安全的字符串,浏览器会按照标签解析#}
    {#如果不加safe的话,就是一个普通的字符串,就不会按照标签解析#}
    如果浏览器把所有标签都解析,那么很容易通过评论、提交等可以写入字符的地方进行css、js注入。
    9、add加
    {{ age|add:"1" }} {# add加,int类型做加法 #}
    {{ name|add:" 先生"|upper }} {# 字符串类型,把两个字符串拼在一起 #}
    PS:支持链式操作,使用多个管道符|
    10、length取长度
    {{ navs|length }}{# 取长度 #}
    11、取下标元素
    {{navs.0}} {# 取第0个元素 #}
    二、自定义tag 
    前端实现自定义函数有两种方式,filter和simple_tag
    准备工作:
      1、在应用目录下创建templatetags目录,必需是pathon package模式的文件目录
      2、在templatetags目录下创建py文件,并导入template模块
    1、filter
    自定义filter最多两个参数
    • 替换敏感词--替换字符串后台写死
    from django import template #导入template模块
    
    register = template.Library() #这个变量必须叫register
    
    # 加上这个就是装饰器
    @register.filter
    def mingan(value:str):
        if '敏感词' in value:
            value = value.replace("敏感词","**")
        return value
    
    #前端使用
    {{ article_content2|mingan }}  {# mingan是后台自定义的过滤函数 #}  
    
    
    • 替换敏感词--前端传入替换字符串
    
    
    @register.filter
    def mingan2(value,s):#函数传入替换字符串s
        if '敏感词' in value:
            value = value.replace("敏感词",s)
        return value
    
    #前端代码
    {{ article_content2|mingan2:"+++" }} {# 传入替换的字符 #}  
    
    

     2、simple_tag

    simple_tag可实现多个参数
    #不限制参数个数,传入一个list
    @register.simple_tag
    def mingan3(value,*args):
        for s in args:
            if s in value:
                value = value.replace(s,'**')
        return value
    
    #前端调用代码
    {% mingan3 say "天黑" "星星" "月亮" "二维"%}  
    {#调用simple_tag格式#}                      
  • 相关阅读:
    MAX导致数据库超时
    mysql查询效率提高技巧
    微信回调报文解析, 获取请求体内容
    炖汤秘方
    首字母小写
    List分页
    HttpServletRequest通过InputStream获取参数
    github命令行
    mysql死锁
    分布式锁-redis
  • 原文地址:https://www.cnblogs.com/yanyan-/p/11776968.html
Copyright © 2011-2022 走看看