IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Flask入门学习(十):Flask模板的使用jinja2(语法,内置过滤器,自定义过滤器)

    52txr发表于 2024-07-24 15:02:00
    love 0

    本文主要介绍了Flask模板的使用,包括jinja2的语法、内置过滤器和自定义过滤器。首先,阐述了模板的概念,即包含占位变量的文件,通过动态赋值后返回给用户。接着,详细介绍了jinja2的三种语法:控制结构、变量取值和注释。然后,列举了Flask内置的过滤器,如绝对值、默认值、格式化字符串等,并提供了示例代码。最后,讲述了如何自定义过滤器,通过使用app.template_filter()装饰器实现字符串反转的示例,使读者更好地理解自定义过滤器的应用。

    模板的概念

    模板简单来说就是一个其中包涵占位变量表示动态的部分的文件,模板文件在经过动态赋值后,返回给用户。 jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用。

    在jinja2中,存在三种语法:

    1. 控制结构 {% %}
    2. 变量取值 {{ }}
    3. 注释 {# #}

    变量取值 {{ }}

    在Flask中,render_template中填入参数data,可以将数据传入

    from flask import Flask, abort, request, make_response, render_template
    
    app = Flask(__name__)
    
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        data = {"name": "张三",
                "age": 18,
                "mylist": [1, 2, 3, 4, 5]
                }
        return render_template('index2.html',data= data)
    
    
    if __name__ == "__main__":
        app.run()

    可以在模板文件中写一个index2.html,里面内容如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    hello world!
    <br>
    {{ data }}
    <br>
    {{ data['name'] }}<br>
    {{ data.name }}<br>
    获取MyList:{{ data['mylist']}}<br>
    MyList索引为1:{{ data['mylist'][1]}}<br>
    MyList索引为1:{{ data.mylist[1]}}<br>
    MyList[0]+MyList[1]:{{ data.mylist[0] + data.mylist[1]}}<br>
    </body>
    </html>

    其中,{{ data }}就是直接读取data变量中的全部内容。也可以进行取值。取值有两种方法。

    运行的效果

    Flask内置的过滤器

    Flask 提供了一些内置的模板过滤器,这些过滤器可以直接在模板中使用。以下是一些常用的内置过滤器:

    • abs(value):返回一个数值的绝对值。例如:-1|abs。
    • default(value,default_value):如果当前变量没有值,则会使用参数中的值来代替。 name|default('hello world'),如果name不存在,则会使用hello world来代替。boolean=False默认是在只 有这个变量为undefined的时候才会使用default中的值,即None,[],{}等都不会使用default的默认值,当boolean=True的时候就可以使用默认来代替,或者用name or 'hello world'来代替name|default('hello world',boolean=True)默认的boolean是True
    • first(value):返回一个序列的第一个元素。name|first
    • format(value,*args,**kwargs):格式化字符串。
    • last(value):返回一个序列的最后一个元素。示例:names|last。
    • length(value):返回一个序列或者字典的长度。示例:names|length
    • join(value,d='u'):将一个序列用d这个参数的值拼接成字符串
    • int(value):将值转换为int类型
    • float(value):将值转换为float类型
    • lower(value):将字符串转换为小写
    • upper(value):将字符串转换为大写
    • replace(value,old,new):替换将old替换为new的字符串
    • truncate(value,length=253,killwords=False):截取length长度的字符串
    • striptags(value):删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格
    • trim:截取字符串前面和后面的空白字符
    • string(value):将变量转换成字符串
    • wordcount(s):计算一个长字符串中单词的个数

    把index2.html的内容改为下面的示例代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>{{ "hello"|capitalize }}</h1>
        <p>{{ "This is a SAMPLE text."|lower }}</p>
        <p>{{ "This is a SAMPLE text."|upper }}</p>
        <p>{{ "this is a long text"|truncate(10) }}</p>
    </body>
    </html>

    运行结果:

    运行结果

    自定义过滤器

    所谓自定义过滤器,就是使用自己写的一个规则函数。

    Flask 还允许定义自己的自定义过滤器,以满足特定需求。要定义自定义过滤器,需要使用 app.template_filter() 装饰器,并将其应用于一个函数。该函数将接受一个或多个参数,并返回处理后的值。

    例如在index2.html的内容如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h2>{{ text2222 }}</h2>
        <h2>{{ text2222 | reverse }}</h2>
    </body>
    </html>

    flask代码如下:

    from flask import Flask, render_template
    
    app = Flask(__name__)
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        return render_template('index2.html',text2222="Hello, World!")
    
    # 自定义过滤器,将字符串反转
    @app.template_filter('reverse')
    def reverse_filter(s):
        return s[::-1]
    
    if __name__ == "__main__":
        app.run()

    运行效果如下:

    运行结果



沪ICP备19023445号-2号
友情链接