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中共享,所以这个变量是不存在的所以报错。