• Flask入门模板过滤器与测试器(五)


    1 模板引擎之过滤器

    概念 : 过滤器本质上是个转换函数,第一个参数是待过滤的变量。如果它有第二个参数,模板中就必须传进去。

    过滤器使用管道符| 放在{{ }}

    Jinja2模板引擎提供了丰富的内置过滤器,主要分为以下几类:

    (1) 字符串进行操作:

    {# 当变量未定义时,显示默认字符串 #}
    <p>{{ name | default('None', true) }}</p>
     
    {# 单词首字母大写 Yes#}
    <p>{{ 'yes' | capitalize }}</p>
     
    {# 单词全小写 xml#}
    <p>{{ 'XML' | lower }}</p>
     
    {# 去除字符串前后的空白字符  like#}
    <p>{{ '  like  ' | trim }}</p>
     
    {# 字符串反转,返回"olleh" #}
    <p>{{ 'hello' | reverse }}</p>
     
    {# format格式化 #}
    {{ '我叫%s 我今年%d岁了 我的存款为%.2f'|format('小胖子',38,1.00002) }}
        
    {# var|replace 替换 #}
    {{ data.html|replace('h','x') }}
        
    {# 关闭HTML自动转义 #}
    <p>{{ '<em>name</em>' | safe }}</p>
     
    {% autoescape false %}
    {# HTML转义,即autoescape关了也转义,可以缩写为e #}
    <p>{{ '<em>name</em>' | escape }}</p>
    {% endautoescape %}
    

    (2) 对列表进行操作

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

    (3) 对数值进行操作: 取证

    {# 四舍五入取整,返回3 #}
    <p>{{ 3.14169 | round }}</p>
     
    {# 向下截取到小数点后2位,返回3.14 #}
    <p>{{ 3.14169 | round(2, 'floor') }}</p>
     
    {# 绝对值,返回15 #}
    <p>{{ -15 | abs }}</p>
        
    {# var|list 将var值转换为列表 #}
    

    (4) 类型转换

    {# var|int 	将var值转换为整形 #}
    {# var|string  将var值转换为字符串类型 #}
    {# var|float   将var值转换为浮点形 #}
    {# var|list    将var值转换为列表 #}
    

    (5) 变量输出JSON格式字符串:一般结合javescript使用

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

    (6) 自定义过滤器

    如果需要自定义过滤器,可以在主应用下定义个函数,因为过滤器本质也是函数

    #定义过滤器函数
    def filter(name):
        return ....
    #导入过滤器函数
    app.add_template_filter(filter, 'fli')
    

    2 模板引擎之测试器

    概念: 测试器is返回结果为布尔值,一般与if控制语句搭配使用

    (1)常见的内置测试器

    {# 检查变量是否被定义,也可以用undefined检查是否未被定义 #}
    {% if name is defined %}
        <p>Name is: {{ name }}</p>
    {% endif %}
     
    {# 检查是否所有字符都是大写 #}
    {% if name is upper %}
      <h2>"{{ name }}" are all upper case.</h2>
    {% endif %}
     
    {# 检查变量是否为空 #}
    {% if name is none %}
      <h2>Variable is none</h2>
    {% endif %}
     
    {# 检查变量是否为字符串,也可以用number检查是否为数值 #}
    {% if name is string %}
      <h2>{{ name }} is a string.</h2>
    {% endif %}
    
    
    {# 检查变量是否可被迭代循环,也可以用sequence检查是否是序列 #}
    {% if [1,2,3] is iterable %}
      <h2>Variable is iterable.</h2>
    {% endif %}
     
    {# 检查变量是否是字典 #}
    {% if {'name':'test'} is mapping %}
      <h2>Variable is dict.</h2>
    {% endif %}
    

    (2) 自定义测试器

    #定义想实现的功能
    def func(str):
    	return ...
    #导入该功能
    app.add_template_test(func,'测试器名')
    

    3 全局函数

    (1) dict函数,用于生成字典

    {% set user = dict('username'='张三','password'=20) %}
    

    (2) joiner()函数:用于分割循环,第一次为空字符串,以后每次都是分割符

    {% set star = joiner('*') %}
    {% for val in range(4) %}
    	{{ star }} {{ val }}
    {% endfor %}
    
  • 相关阅读:
    [程序员代码面试指南]栈和队列-单调栈结构(单调栈)
    快学Scala第一部分
    Add Digits
    Nim Game
    将分布式中多台节点的日志信息集中到一个节点上
    Eclipse调试的一些小技巧
    Maven的常用命令
    Eclipse插件本地扩展安装
    Spark应用程序的运行框架
    Spark运行各个时间段的解释
  • 原文地址:https://www.cnblogs.com/why957/p/9119443.html
Copyright © 2020-2023  润新知