Flask模板知识介绍

一、jinja2过滤器

  • 1.内置过滤器
    变量可以通过 过滤器 修改。过滤器与变量用管道符号( | )分割,并且也 可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作为 后一个过滤器的输入。使用方法:{{ 变量名|过滤器名("参数") }}
过滤器 说明
abs 返回一个数值的绝对值
default 当前变量没有值则返回默认值,boolean=True当变量有值但是值为False(空字符串,空列表,空字典)时返回默认值
safe 可以关闭一个字符串的自动转义, 禁用转义
escape 对某一个字符串进行转义
first 返回一个序列的第一个元素
last 返回最后一个值
format 格式化字符串
length 返回一个序列类型的长度
join 将一个序列,用指定的参数拼接成字符串
int 将值转换为 int 类型
float 将值转换为 float 类型
lower 将字符串转换为小写
upper 将字符串转换为大写
string 将变量转换为字符串
replace 替换字符串replace('原字符串', '新字符串')
truncate 截取指定长度的字符串truncate(length=8)
striptags 删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格
trle 截取字符串前面和后面的空白字符
wordcount 计算一个长字符串中单词的个数
title 把值中的第个单词的首页字母变成大写
captalize 把变量值的首字母转成大写,其余字母转小写
trim 把值的首尾空格去掉
reverse 字符串的反转
sum 列表求和
sort 列表排序
  • 2.自定义过滤器
    过滤器的本质就是函数,如果在模板中调用这个过滤器,那么就会将这个变量的值作为第一个参数传给过滤器函数,然后将函数的返回值作为滤器的返回值, 在python文件中写好过滤的函数和逻辑,将函数注册到模板过滤器中:@app.template_filter('过滤器名'),在模板中调用过滤器:变量|过滤器名。
@app.template_filter('my_filter')
def add_unit(data, unit)
    data = str(data)+unit
    return data    

在模板中使用:

{{ data|my_filter('%') }}

{{ age|my_filter('岁')}}

二、控制语句

所有的控制语句都是放在{% ... %}中,并且有⼀个语句{% endxxx %}来进⾏结束,Jinja中常⽤的控制语句有if/for..in..

  • 1.if控制语句
    新建一个app.py实例文件,代码如下:
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
@app.route('/if/')
def if_control():
    contest = {
        'name': 'zhangsan',
        'age': 20
    }
    return render_template('if.html', **contest)
if __name__ == '__main__':
    app.run(debug=True)

新建一个if.html文件,代码如下:




    
    if控制语句


    {% if name %}  // 判断name变量是否为真,注意这里变量无需通过{{ 变量名 }}的方式来表示
        

您好,{{ name }}!

{% endif %} {% if age >= 18 %} // 判断age变量是否大于18

成年人

{% else %}

未成年人

{% endif %}
  • 2.for控制语句的装载
    新建一个app.py实例文件,代码如下:
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
@app.route('/for/')
def for_control():
    contest = {
        'books': [
            {
                'name': '三国演义',
                'author': '罗贯中',
                'price': 70
            },
            {
                'name': '西游记',
                'author': '吴承恩',
                'price': 70
            },
            {
                'name': '红楼梦',
                'author': '曹雪芹',
                'price': 70
            },
            {
                'name': '水浒传',
                'author': '施耐庵',
                'price': 70
            }
        ]
    }
    return render_template('for.html', **contest)
if __name__ == '__main__':
    app.run(debug=True)

新建一个for.html文件,代码如下:




    
    for控制语句



    {% for book in books %}
    
        {% for value in book.values() %}
            
        {% endfor %}
    
    {% endfor %}
书名 作者 价格
{{ value }}

并且Jinja2中的for循环还包含以下变量,可以⽤来获取当前的遍历状态。

变量 描述
loop.index 当前迭代的索引(从1开始)
loop.index0 当前迭代的索引(从0开始)
loop.first 是否是第⼀次迭代,返回True或False
loop.last 是否是最后⼀次迭代,返回True或False
loop.length 序列的⻓度

另外,不可以使⽤continue和break表达式来控制循环的执⾏。

三、宏和import

  • 宏的简介
    宏类似常规编程语言中的函数。它们用于把常用行为作为可重用的函数,取代 手动重复的工作。如果宏在不同的模板中定义,你需要首先使用 import,比如:
{% macro input(name, value='', type='text', size=20) -%}
    
{%- endmacro %}

在命名空间中,宏之后可以像函数一样调用:

{{ input('username') }}

{{ input('password', type='password') }}

  • 宏的导入import
    定义一个宏文件macros.html。


{% macro input(name="",value="", type="text") %}
    
    
{% endmacro %}

导入方式有如下几种:

{% import "macros.html" as macros %}
{% from "macros.html" import input %}
{% from "macros.html" import input as macros %}

另外需要注意的是,导⼊模板并不会把当前上下⽂中的变量添加到被导⼊的模板中,如果你想要导⼊⼀个需要访问当前上下⽂变量的宏,有两种可能的⽅法显式地传⼊请求或请求对象的属性作为宏的参数与上下⽂⼀起(with context)导⼊宏。

{% import "macros.html" as macros with context %}

你可能感兴趣的:(Flask模板知识介绍)