从Python内部生成HTML并不是一件有趣的事情,并且实际上非常麻烦,因为您必须自己进行HTML转义以确保应用程序的安全。因此,Flask 会自动为您配置Jinja2模板引擎。
要渲染模板,您可以使用render_template() 方法。您所要做的就是提供模板的名称以及要作为关键字参数传递给模板引擎的变量。
有关如何渲染模板的简单示例
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
Flask将在templates文件夹中查找模板hello.html,并且将hello.html中的name占位符使用name变量值替换
模版文件夹位置
案例1:如果app程序作为一个模块,模版文件夹templates与app程序为同一级目录
/application.py
/templates
/hello.html
案例2: 如果application是一个包,则模版包含在application包内
/application
/__init__.py
/templates
/hello.html
对于模板,您可以使用Jinja2模板的全部功能。请访问官方的Jinja2模板文档以获取更多信息。
模版示例
以hello.html为例
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}
在模板内部,您还可以访问request, session对象、g对象以及get_flashed_messages()函数
如果使用继承,则模板特别有用。如果您想知道它是如何工作的,请转到模板继承模式文档。基本上,模板继承可以在每个页面上保留某些元素(例如页眉,导航和页脚)。
启用了自动转义,因此如果name包含HTML,它将自动转义。如果您可以信任变量,并且知道它将是安全的HTML(例如,因为它来自将Wiki标记转换为HTML的模块),则可以使用Markup类或使用|safe模板中的过滤器将其标记为安全 。有关更多示例,请转到Jinja 2文档。
Markup运行机制
>>> from markupsafe import Markup
>>> Markup('<strong>Hello %s!</strong>') % '<blink>hacker</blink>'
Markup(u'<strong>Hello <blink>hacker</blink>!</strong>')
>>> Markup.escape('<blink>hacker</blink>')
Markup(u'<blink>hacker</blink>')
>>> Markup('<em>Marked up</em> » HTML').striptags()
u'Marked up \xbb HTML'
Markup可以将html的特殊符号转换为实体符号
讨论区