Flask默认使用的是Jinja2的模板引擎,下面将会介绍下Flask提供给模板的一些方法。
#-*- coding: utf-8 -*-
#导入一些函数
from flask import Flask
from flask import render_template,g
#创建一个app
app = Flask(__name__)
#创建一个装饰器
@app.route("/")
@app.route("/index")
def index():
string="<h1>11</h1>"
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_processor
def inject_user():
return dict(test="<h1>a tmp variable</h1>")
#下面的functest函数也是可以在所有的模板中使用的
@app.context_processor
def testfunc():
def functest(name):
return "<h1>%s</h1>" %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
#运行app
if __name__ == "__main__":
app.run(debug=True,host='0.0.0.0')
下面是templates目录的下test,html模板
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>测试页面</title>
</head>
<body>
<h1>转义后的页面</h1>
{{ name|safe }}
<h1>没有转义后的页面</h1>
` name `
<h1>下面这块区域自动转义关闭了</h1>
{% autoescape false %}
<p>autoescaping is disabled here
<p>` name `
{% endautoescape %}
{{ name|reverse }}
<h1>我是test变量 通过context_processor传递过来的</h1>
` test `
<h1>我是通过context_processor注册的函数</h1>
{{ functest("你好") }}
</body>
</html>
运行后结果如下:
下面是放我http://127.0.0.1:5000/test页面的结果,因为g.user只是在一个request中共享,所以这个变量是不存在的所以报错。
转载于:https://blog.51cto.com/forlinux/1409354