Flask框架 之模版
一、过滤器
safe:禁用转义;
<p>{{ '<em>hello</em>' | safe }}</p>
capitalize:把变量值的首字母转成大写,其余字母转小写;
<p>{{ 'hello' | capitalize }}</p>
lower:把值转成小写;
<p>{{ 'HELLO' | lower }}</p>
upper:把值转成大写;
<p>{{ 'hello' | upper }}</p>
title:把值中的每个单词的首字母都转成大写;
<p>{{ 'hello' | title }}</p>
trim:把值的首尾空格去掉;
<p>{{ ' hello world ' | trim }}</p>
reverse:字符串反转;
<p>{{ 'olleh' | reverse }}</p>
format:格式化输出;
<p>{{ '%s is %d' | format('name',17) }}</p>
striptags:渲染之前把值中所有的HTML标签都删掉;
<p>{{ '<em>hello</em>' | striptags }}</p>
first:取第一个元素
<p>{{ [1,2,3,4,5,6] | first }}</p>
last:取最后一个元素
<p>{{ [1,2,3,4,5,6] | last }}</p>
length:获取列表长度
<p>{{ [1,2,3,4,5,6] | length }}</p>
sum:列表求和
<p>{{ [1,2,3,4,5,6] | sum }}</p>
sort:列表排序
<p>{{ [6,2,3,1,5,4] | sort }}</p>
二、自定义过滤器
1、定义函数方式
@app.route("/") def index(): data = [1,2,3,4,5] return render_template("index.html", data=data) # 1、定义过滤器 def list(li): # 1,3,5 return li[::2] # 2、注册过滤器 # to_list是模板中使用的名字 app.add_template_filter(list, "to_list")
2、使用装饰器方式
@app.template_filter("to_list") def list(li): # 1,3,5 return li[::2]
使用:{{data | to_list}}
三、宏
将重复的代码定义成宏。
1、不带参数定义宏
{% macro input() %} <input type="text" name="username" value="" size="30"/> {% endmacro %} {{ input() }}
2、定义带参数的宏
{% macro input(name,value='',type='text',size=20) %} <input type="{{ type }}" name="{{ name }}" value="{{ value }}" size="{{ size }}"/> {% endmacro %} {{ input(value='name',type='password',size=40)}}
3、把宏单独抽取出来,封装成html文件,其它模板中导入使用
文件名可以自定义macro.html
{% macro function() %} <input type="text" name="username" placeholde="Username"> <input type="password" name="password" placeholde="Password"> <input type="submit"> {% endmacro %}
在其它模板文件中先导入,再调用
{% import 'macro.html' as func %}
{% func.function() %}
四、模版的继承与包含
extends 与 include
from flask import Flask, render_template app = Flask(__name__) @app.route("/") def index(): return render_template("web.html", title="web模板继承", body="这是内容") if __name__ == '__main__': app.run()
base.html
<!DOCTYPE html> <html lang="en"> <head> {% include 'inc.html'%} <title>{% block title %} flask {% endblock %}</title> </head> <body> {% block body %} {% endblock %} </body> </html>
inc.html
<meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
web.html
{% extends 'base.html' %} {% block title %} {{title}} {% endblock %} {% block body %} <h1>{{body}}</h1> {% endblock %}
五、自定义全局函数
def get_option(name, default=None): return website_config.get(name) or default app.add_template_global(get_option, "get_option")
使用
{% block title %} {{get_option('name', '测试')}} {% endblock %}