前言
1.把它看成jinja2的一个函数,这个函数可以返回一个html字符串
2.目的:代码可以复用,避免代码冗余
定义两种方式:
1.在模板中直接定义
类似于macro1.html中定义方式
2.将所有宏提取到一个模板中:macro.html
谁想使用水导入:
{%import ‘macro.html’ as xxx%}
{{xxx.宏名字(参数)}}
使用一
代码
macro.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>宏的定义</title>
</head>
<body>
{# 定义宏 #}
{% macro form(action,value='登录',method='post') %}
<form action="{{ action }}" method="{{ method }}">
<input type="text" placeholder="用户名" name="username">
<br>
<input type="text" placeholder="密码" name="password">
<br>
<input type="submit" value={{ value }}>
</form>
{% endmacro %}
{# 调用宏 #}
{{ form('/') }}
</body>
</html>
app1.py
from flask import Flask,render_template
import settings
app = Flask(__name__)
app.config.from_object(settings)
@app.route('/macro')
def use_macro():
return render_template('macro.html')
if __name__ == '__main__':
app.run()
效果
使用二
如果有很多个宏,我们可以建一个文件夹
如果macro2想用macro1
代码
macro2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>宏的使用2</title>
</head>
<body>
{% import 'macro/macro.html' as funx %}
{{ funx.form('/welcome',value='注册') }}
</body>
</html>
app1.py
@app.route('/macro1')
def use_macro2():
return render_template('macro/macro2.html')