• flask 过滤器


    作用的对象是jinja2模版中的变量({{}})

    参考链接:

    http://jinja.pocoo.org/docs/2.9/templates/#builtin-filters

    内置过滤器

    字符串操作

    {# 当变量未定义时,显示默认字符串,可以缩写为d #}
    <p>{{ name | default('No name', true) }}</p>
     
    {# 单词首字母大写 #}
    <p>{{ 'hello' | capitalize }}</p>
     
    {# 单词全小写 #}
    <p>{{ 'XML' | lower }}</p>
     
    {# 去除字符串前后的空白字符 #}
    <p>{{ '  hello  ' | trim }}</p>
     
    {# 字符串反转,返回"olleh" #}
    <p>{{ 'hello' | reverse }}</p>
     
    {# 格式化输出,返回"Number is 2" #}
    <p>{{ '%s is %d' | format("Number", 2) }}</p>
     
    {# 关闭HTML自动转义 #}
    <p>{{ '<em>name</em>' | safe }}</p>
     
    {% autoescape false %}
    {# HTML转义,即使autoescape关了也转义,可以缩写为e #}
    <p>{{ '<em>name</em>' | escape }}</p>
    {% endautoescape %}
    #用管道的形式,如果avatar(后端传过来的变量)的值不存在,则用default的值
    {{ avatar|default('xxx') }}    
    #这里的意思为获取avatar的长度,avatar为后端传过来的变量,可以是列表,也可以是字典
    {{ avatar|length }}      

    数值操作

    {# 四舍五入取整,返回13.0 #}
    <p>{{ 12.8888 | round }}</p>
     
    {# 向下截取到小数点后2位,返回12.88 #}
    <p>{{ 12.8888 | round(2, 'floor') }}</p>
     
    {# 绝对值,返回12 #}
    <p>{{ -12 | abs }}</p>

    列表操作

    {# 取第一个元素 #}
    <p>{{ [1,2,3,4,5] | first }}</p>
     
    {# 取最后一个元素 #}
    <p>{{ [1,2,3,4,5] | last }}</p>
     
    {# 返回列表长度,可以写为count #}
    <p>{{ [1,2,3,4,5] | length }}</p>
     
    {# 列表求和 #}
    <p>{{ [1,2,3,4,5] | sum }}</p>
     
    {# 列表排序,默认为升序 #}
    <p>{{ [3,2,1,5,4] | sort }}</p>
     
    {# 合并为字符串,返回"1 | 2 | 3 | 4 | 5" #}
    <p>{{ [1,2,3,4,5] | join(' | ') }}</p>
     
    {# 列表中所有元素都全大写。这里可以用upper,lower,但capitalize无效 #}
    <p>{{ ['tom','bob','ada'] | upper }}</p>

    字典列表操作

    {% set users=[{'name':'Tom','gender':'M','age':20},
                  {'name':'John','gender':'M','age':18},
                  {'name':'Mary','gender':'F','age':24},
                  {'name':'Bob','gender':'M','age':31},
                  {'name':'Lisa','gender':'F','age':19}]
    %}
     
     
     
    {# 按指定字段排序,这里设reverse为true使其按降序排 #}
    <ul>
    {% for user in users | sort(attribute='age', reverse=true) %}
         <li>{{ user.name }}, {{ user.age }}</li>
    {% endfor %}
    </ul>
     
    {# 列表分组,每组是一个子列表,组名就是分组项的值 #}
    <ul>
    {% for group in users|groupby('gender') %}
        <li>{{ group.grouper }}<ul>
        {% for user in group.list %}
            <li>{{ user.name }}</li>
        {% endfor %}</ul></li>
    {% endfor %}
    </ul>
     
    {# 取字典中的某一项组成列表,再将其连接起来 #}
    <p>{{ users | map(attribute='name') | join(', ') }}</p>

    内置过滤器:tojson,配合js使用

    <script type="text/javascript">
    var users = {{ users | tojson | safe }};
    console.log(users[0].name);
    </script>

    注意,这里要避免HTML自动转义,所以加上safe过滤器

    自定义过滤器

    自定义过滤器其实就是一个函数,自己写即可

    def mylen(arg):#实现一个可以求长度的函数
        return len(arg)
    
    # 该函数实现给定一个区间返回区间的内容
    def interval(test_str, start, end):#过滤器中传递多个参数,第一个参数为被过滤的内容,第二第三个参数需要自己传入
        return test_str[int(start):int(end)]
    
    env = app.jinja_env
    env.filters['mylen'] = mylen      #注册自定义过滤器
    env.filters['interval'] = interval   #注册自定义过滤器
    @app.route("/")
    def index():
      test_str = "hello"
      return render_template("index.html",
    test_str=test_str)
    jinja2模板 <body> <h1>len: {{test_str|mylen}}</h1> <h1>interval: {{test_str|interval(0,2)}}</h1>    #test_str作为参数传到interval函数里 </body>
  • 相关阅读:
    学习完vue指令 做的一个学生信息录入系统
    vue常用指令总结
    vue介绍以及相关概念理解大全
    class类
    javascript闭包详解
    前端必看网站(一直更新中)
    微信小程序wx.getUserInfo获取用户信息
    微信小程序自定义组件注意事项
    微信小程序自定义选项卡
    uni-app开发注意事项及常用样式
  • 原文地址:https://www.cnblogs.com/FRESHMANS/p/8428740.html
Copyright © 2020-2023  润新知