一. 模板复用方法和前置条件
1. 语法:
{% block 名字 %}{% endblock %}
2. 三种方法:
(1). 模板继承 *
(2). include
(3). 宏
3. 前置条件:
(1). 多个模板具有相同的顶部和底部
(2). 多个模板具有相同的模板内容,但是内容中部分不一样
(3). 多个模板具有完全相同的模板内
二. 模板复用的方法
1. 模板继承
# 1. 定义公共模板
# 2. 页面模板继承公共模板
# 步骤:
# 1. 公共模板:
'''
(1). 定义一个base.html的模板
(2). 分析模板中那些是变化的,对变化的部分用block进行"预留位置"也称作:挖坑
'''
{% block title %}公共模板的title{% endblock %}
'''
(3). 注意: 样式和脚本,需要提前预留
'''
{% block mycss %}{% endblock %}
{% block myjs %}{% endblock %}
# 2. 页面模板使用公共模板:
'''
(1). 将公共模板继承过来
'''
{% extends '公共模板名称' %}
'''
(2). 找到对应的block(坑)填充,每一个block都是有名字的
'''
{% block title %}首页{% endblock %}
# 3. 外部样式的加载
{{ url_for('static',filename='css/style.css') }}
2. include
# include : 包含; 会把公共模板内所有东西都带上
# 在A,B,C页面都有共同的部分,但是其他页面没有这部分,这个时候考虑使用include;
# 公共模板可以只写标签语法(把默认html标签去除)
<div style="height:50px; background-color:deeppink"></div>
# 步骤:
1. 先定义一个公共的模板: xxx.html
2. 谁使用则include过来
{% include '文件夹/xxx.html' %}
3. 宏
# 宏: macro
1. 把它看作是jinja2的一个函数,这个函数可以返回一个HTML字符串
2. 目的: 代码可以复用,避免代码冗余
# 定义两种方式:
1. 在模板中直接定义
2. 将所有的宏提取到一个模板中:macro.html
谁想使用谁导入即可
{% import 'mac.html' as xxx %}
{{ xxx.宏名字(参数) }}
(1) 定义宏(base.html)
{# 定义宏,有默认值其他模板传入的值不生效 #}
{% macro form(action,value="登录",method="post") %}
<form action="{{ action }}" method="{{ method }}">
<input type="text" placeholder="用户名" name="username">
<br>
<input type="password" placeholder="密码" name="password">
<br>
<input type="submit" value="{{ value }}">
</form>
{% endmacro %}
{# 内部调用宏(相当于执行函数) #}
{{ form("/show") }}
(2) 调用宏(show.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
{# 外部调用宏 #}
{% import 'base.html' as func %}
{{ func.form("/show",value="注册") }}
</body>
</html>
(3)视图函数(app.py)
from flask import Flask, render_template, request
import settings
app = Flask(__name__)
app.config.from_object(settings) # 加载配置文件
@app.route("/show",methods=["GET", "POST"])
def show():
if request.method=="GET":
return render_template("base.html")
return "注册成功"
if __name__ == '__main__':
app.run(port=8080)