Flask默认使用的是Jinja2的模板引擎,下面将会介绍下Flask提供给模板的一些方法。

#-*- coding: utf-8 -*-#导入一些函数from flask import Flaskfrom flask import render_template,g#创建一个appapp = Flask(__name__)#创建一个装饰器@app.route("/")@app.route("/index")def index():    string="

11

" g.test = "I am a g variable" #默认会转义html标签,如果不想转义可以通过|safe来关闭转义 #或者通过下面模板标签来关闭html标签转义 #{% autoescape false %} #{% endautoescape %} return render_template("test.html",name=g.test)#测试g.test是不是可以全局#测试结果表明g.test是不可以夸request的@app.route("/test")def test(): return render_template("test.html",name=g.test)#创建全局的模板变量或函数#下面创建的test变量可以在所有的模板中使用@app.context_processordef inject_user(): return dict(test="

a tmp variable

")#下面的functest函数也是可以在所有的模板中使用的@app.context_processordef testfunc(): def functest(name): return "

%s

" %name return dict(functest=functest)#注册一个过滤器#方式一##@app.template_filter('reverse')##def reverse_filter(s):###方式二def reverse_filter(s): return s[::-1]app.jinja_env.filters['reverse'] = reverse_filter #运行appif __name__ == "__main__": app.run(debug=True,host='0.0.0.0')

下面是templates目录的下test,html模板

测试页面

转义后的页面

{
{ name|safe }}

没有转义后的页面

` name `

下面这块区域自动转义关闭了

{% autoescape false %}

autoescaping is disabled here

` name `{% endautoescape %}{

{ name|reverse }}

我是test变量 通过context_processor传递过来的

` test `

我是通过context_processor注册的函数

{
{ functest("你好") }}

运行后结果如下:

 

   下面是放我http://127.0.0.1:5000/test页面的结果,因为g.user只是在一个request中共享,所以这个变量是不存在的所以报错。