在Flask中,配套的模板是Jinja2,这个模板非常的强大,并且执行效率高。
Flask渲染Jinja2模板,通过render_template方法来渲染一个模板
示例代码:
- from flask import Flask, render_template
-
- app = Flask(__name__)
-
-
- @app.route('/index')
- def index():
- return render_template('index.html')
-
-
- if __name__ == '__main__':
- app.run()
运行结果:

注意:上面代码写法存在问题,url不能写成/index
示例代码:
- from flask import Flask, render_template
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- return render_template('index.html')
-
-
- if __name__ == '__main__':
- app.run()
运行结果:


当访问/的时候,index()函数会在当前目录下的templates文件夹下寻找index.html模板文件。如果想更改模板文件地址,应该在创建app的时候,给Flask传递一个关键字参数template_folder,指定具体的路径,如下面代码所示:
- from flask import Flask, render_template
-
- app = Flask(__name__, template_folder='C:\data\templates')
-
-
- @app.route('/')
- def index():
- return render_template('index.html')
-
-
- if __name__ == '__main__':
- app.run()
上面代码中将会把模板文件的路径修改为了C盘中的data/template中。
如果程序中将要把参数传递给模板文件中时,参数传递方式如下代码所示:
main.py
- from flask import Flask, render_template
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- content = {
- "name": 'dgw',
- "age": 25,
- "sex": '男'
- }
- return render_template('index.html', **content)
-
-
- if __name__ == '__main__':
- app.run()
index.html
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>首页title>
- head>
- <body>
- 欢迎来到首页!
- <div>
- name:{{ name }} <br>
- sex:{{ sex }} <br>
- age:{{ age }} <br>
- div>
- body>
- html>
运行结果:

render_template需要传递的是一个关键字参数,当参数过多时可以使用字典进行包装,并且加两个*号,来转换成关键字参数。
关于Jinja2中更多参数的传递方式,如下示例代码所示:
main.py
- from flask import Flask, render_template
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- content = {
- "names": {"name": 'dgw'},
- "age": 25,
- "sex": '男'
- }
- name_list = ['张三', '李四', '王五']
- return render_template('index.html', **content, name_list=name_list)
-
-
- if __name__ == '__main__':
- app.run()
index.html
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>首页title>
- head>
- <body>
- 欢迎来到首页!
- <div>
- names:{{ names.name }} <br>
- names:{{ names['name'] }} <br>
- sex:{{ sex }} <br>
- age:{{ age }} <br>
-
- {# personal info #}
- div>
- <div>
- <ul>
- {% for name in name_list %}
- <li>{{ name }}li>
- {% endfor %}
- ul>
- div>
- body>
- html>
运行结果:

Jinja2模板属性访问规则:
关于模板中这种使用:foo.bar,那么在Jinja2中是这样进行访问的:
关于模板中这种使用:foo['bar'],那么在Jinja2中是这样进行访问: