Flask默认使用Jinja2作为模版引擎。模版引擎包含了变量和表达式,当模版被渲染时,它们被替换为值和标签,它们控制着模版的逻辑。下面主要回顾模版的渲染使用,以及Jinja2的语法。
1 模版渲染
1.1 目录结构
Flask 会在 templates 文件夹里寻找模板。所以,如果你的应用是个模块,这个文件夹应该与模块同级;如果它是一个包,那么这个文件夹作为包的子目录:
场景1: 模块
application文件应该与templates目录同级
/application.py
/templates
/hello.html
场景2: 包
templates目录作为application的子目录
/application
/__init__.py
/templates
/hello.html
1.2 渲染
Flask使用 render_template() 方法来渲染模板。渲染时框架会自动寻找templates目录下的网页文件,不必添加"templates"这个路径。
render_template()方法第一个参数为html文件名,后续参数为模版文件中的变量名,可支持字典类型变量。
在模板里,也可以访问 request 、 session 和 g 对象, 以及 get_flashed_messages() 函数。
用法示例
文件目录结构:
html文件user.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Flask首页</title>
</head>
<body>
{
% if name %}
<h1>Hello {
{
name }}!</h1>
{
% else %}
<h1>Hello world!</h1>
{
% endif %}
</body>
</html>
模版渲染代码manager.py:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/user/")
@app.route("/user/<name>")
def index(name=None):
return render_template("user.html", name=name)
if __name__ == '__main__':
app.run(debug=True)
在浏览器中输入URL:http://127.0.0.1:5000/user/bruce
页面显示如下
1.3 字典类型变量
当模版中变量比较多时,可以直接使用字典类型变量。
修改user.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Flask首页</title>
</head>
<body>
{
% if name %}
<h1>Hello {
{
name }}!</h1>
<h2>user age: {
{
age}}, phone: {
{
phone}}!</h2>
{
% else %}
<h1>Hello world!</h1>
{
% endif %}
</body>
</html>
修改渲染代码:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/user/")
@app.route("/user/<name>")
def index(name=None):
info = {
"name": name,
"age": 33,
"phone": 123456789
}
return render_template("user.html", **info)
if __name__ == '__main__':
app.run(debug=True)
浏览器输入URL:http://127.0.0.1:5000/user/bruce.xu
2 Flask变量传递
Jinja 2 默认配置如下:
所有扩展名为 .html 、 .htm 、 .xml 以及 .xhtml 的模板会开启自动转义
模板可以利用 {% autoescape %} 标签选择自动转义的开关。
Flask 在 Jinja2 上下文中插入了几个全局函数和助手,另外还有一些目前默认的值。
Flask全局变量
下面的全局变量默认在 Jinja2 模板中可用
变量 | 说明 |
---|---|
config | 当前的配置对象 (flask.config) |
request | 当前的请求对象 (flask.request)。当模版不是在活动的请求上下文中渲染时这个变量不可用。 |
session | 当前的会话对象 (flask.session)。当模版不是在活动的请求上下文中渲染时这个变量不可用。 |
g | 请求相关的全局变量 (flask.g)。当模版不是在活动的请求上下文中渲染时这个变量不可用。 |
url_for() | flask.url_for() 函数 |
get_flashed_messages() | flask.get_flashed_messages() 函数 |
(1)请求对象request
request对象可以用来获取请求的方法”request.method”,表单”request.form”,请求的参数”request.args”,请求地址”request.url”等。它本身是一个字典。在模板中,你一样可以获取这些内容,只要用表达式符号”{
{ }}”括起来即可。
<p>{
{
request.url}}</p>
(2)会话对象session
session对象可以用来获取当前会话中保存的状态,它本身是一个字典。在模板中,你可以用表达式符号”{
{ }}”来获取这个对象。
在request对象中设置session变量
@app.route('/')
def index():
session['user']