模板-----控制结构
根目录下的基础代码 flaskStudy.py
from flask import Flask, render_template
app = Flask(__name__)
args = {
"sex": "male",
"addr": "beijing",
"like": "tea",
"age": 65
}
@app.route("/fromuser/<name>")
def user(name):
return render_template("user.html", user=name,args=args)
if __name__ == '__main__':
app.run()
条件控制
在根目录下的templates目录下创建user.html, 内容如下。
{% if user %}
hello, {{ user }} !
{% else %}
hello, Strange !
{% endif %}
功能为: 判断user是否存在。
运行结果

循环控制
在user.html中增加如下代码
<ul>
{% for arg in args %}
<li>{{ arg }}</li>
{% endfor %}
</ul>
功能: 通过for循环打印user的所有属性。
运行结果:

宏
类似python代码中的函数
1、 在代码中直接编写引用。
{% if user %}
hello, {{ user }} !
{% else %}
hello, Strange !
{% endif %}
{% macro render_arg(arg) %}
<li>{{ arg }}</li>
{% endmacro %}
{% for arg in args %}
{{ render_arg(arg) }}
{% endfor %}
功能: 创建一个宏 render_arg, 在for循环中调用宏。
运行结果:

2、像python一样, 把宏(函数)保存在单独的文件中, 然后在需要的模块中导入。
macros.html
{% macro render_arg(arg) %}
<li>{{ arg }}</li>
{% endmacro %}
user.html
{% if user %}
hello, {{ user }} !
{% else %}
hello, Strange !
{% endif %}
{% import 'macros.html' as macros %}
{% for arg in args %}
{{ macros.render_arg(arg) }}
{% endfor %}
包含
应用场景: 有一段代码, 在多处被频繁引用,为了避免多次编辑,可将这段代码存储于一个单独的文件中, 在需要的模块中引用。
common.html : 存储利用频繁的代码片段
{% include 'common.html' %} : 在需要的模块中引用common.html中的代码
示例:
common.html
{% if user %}
hello, {{ user }} !
{% else %}
hello, Strange !
{% endif %}
user.html
{% include"common.html" %}
{% import 'macros.html' as macros %}
{% for arg in args %}
{{ macros.render_arg(arg) }}
{% endfor %}
模板继承
类似于python代码中的类继承。
base.html
<!DOCTYPE html>
<head>
{% block header %}
<title>{% block title %}{% endblock %} - My Application</title>
{% endblock %}
</head>
<body>
{% block body %}
{% endblock %}
</body>
</html>
jinja2使用block和endblock来定义内容区块,在衍生模板中可覆盖这些定义的区块。
user.html
{% extends "base.html" %}
{% block title %}Index {% endblock %}
{% block header %}
{{ super()}}
<style>
</style>
{% endblock %}
extends: 声明这个模板衍生自base.html
同名区块: 基模板中同名区块内容被覆盖。
supper(): 引用基模板中同区块的内容
浙公网安备 33010602011771号