• django模板filter及自定义filter


    有时后端返回的数据,需要前端处理,比如超过XX个字符展示...这种需求,就需要用到filter。django有自带的filter模块,也可以自己定义filter来过滤。

    一、django自带filter:

    views.py:

    def test(request):
        import datetime
        cur_time=datetime.datetime.now()
        age = 18
        name = 'marry'
        article_content = 'django有自带的分页,非常的好用,代码如下:django有自带的分页,非常的好用,代码如下:django有自带的分页,非常的好用,代码如下:'
        navs = ["我的日记","我的相册",'我的心情','我的心情1','我的心情2','我的心情3']
        comments = "<h1 style='font-size:500px'>你好呀</h1>"
        h1_str = '<p style="font-size:98px">哈哈哈哈</p>'
        js_str="<script>alert('哈哈哈哈')</script>"
        article_content = "朝鲜一哥金三胖,已经登上太阳,为了避免太阳太热,选择晚上奔上太阳"
        say = "今天吃饭的时候,碰到一个傻x,那个家伙实在是太213了,公然插队,吃完饭在马路上随地大小便,够sb的。"
        return render(request,'test.html',locals())    #locals()就是把所有定义的变量返回

    二、自定义filter:目录是  app模块下建一个放tags的目录。my_tags.html

    目录结构:

     代码:

    from django import template
    #自定义tags。必须在user下创建一个python package,并且包名必须为“templatetags”
    register=template.Library()  #register名字也是固定的
    @register.filter(name='hm')    #这里的name是前端调用方法时的name,不加的话就是方法名#@register.filter()
    def mingan(value):
        if "金三胖" in value:
            value=value.replace("金三胖","金正恩")
        return value
    
    @register.filter()
    def mingan2(value,s):    #前端传参,自定义filter最多只能两个参数
        if "金三胖" in value:
            value=value.replace("金三胖",s)
        return value
    
    
    #simple tag:
    @register.simple_tag    #simple_tag可以传多个参数
    def mingan3(value,*args):
        for s in args:
            if s in value:
                value=value.replace(s,"**")
        return value

    三、前端用自定义filter和自带filter的方式

    {% load my_tags %}     #这里要引入自定义filter
    
    {#引入自定义的tags#}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {{ age }}
    {{ age|add:"1" }}
    {#age的基础上加1#}
    <br>
    {{ name }}
    {{ name |add:"先生"|upper}}
    {#支持链式操作#}
    <br>
    {{ comments }}
    {#{{ comments|safe }}#}
    {#如果后边加了safe的话,认为这个是安全的字符串,浏览器会按照标签内容解析。容易造成CSS注入,所以当不需要浏览器解析标签时,就不要加safe#}
    <br>
    {{ article_content|truncatechars:"20" }}
    {#截断字符串的,多余的字符串用...显示#}
    <br>
    
    {{ navs|slice:"0:3" }}
    {#切片#}
    <br>
    {{ navs.0 }}
    {#获取第0个元素#}
    <br>
    {{ navs|length }}
    {#获取长度#}
    <br>
    {{ navs|join:"====" }}
    {#拼接#}
    <br>
    {{ author |default:"管理员" }}
    <br>
    {{ cur_time|date:'Y/m/d H:i:s' }}
    <br>
    {{ js_str }}
    {#{{ js_str|safe }}#}
    {#如果后边加了safe的话,认为这个是安全的字符串,浏览器会按照标签内容解析。容易造成JS注入#}
    <br>
    {{ article_content|hm }}
    {{ article_content|mingan2:'金胖子' }}
    {#register.filter 用法#}
    {#用法#}
    <br>
    {% mingan3 say "213" "sb" "傻x"%}
    {#simple tag 用法#}
    
    <br>
    {{ name|lower }}
    
    </body>
    </html>

    四、urls.py中urlpatterns  加上“path('test/', views.test),”

    然后运行django工程,访问127.0.0.1:8000/test。样式应该如下图

  • 相关阅读:
    记录log中的16进制和ASCII码字符输出
    有效的沟通技巧
    时间的真谛
    目标设定与时间管理
    第四代时间管理
    什么是高效沟通
    error LNK1104: cannot open file 错误解决方案
    js压缩工具1.0界面绘制
    时间管理的定义与目的
    JArgs命令行选项解析>Java套件
  • 原文地址:https://www.cnblogs.com/hancece/p/11771109.html
Copyright © 2020-2023  润新知