鋒哥原創的Flask3??Python Web開發?Flask3視頻教程:
2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili
不管是開發網站還是后臺管理系統,我們頁面里多多少少有公共的模塊。比如博客網站,就有公共的頭部,菜單和底部欄。每個頁面都有,我們往往要抽取出這些公共模塊,然后統一維護。JinJa2提供了模板繼承和include標簽。
我們先把頂部信息和菜單抽取新建一個header.html放templates下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<p>頭部,菜單</p>
</body>
</html>
同理 底部信息頁抽取新建一個footer.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<p>底部</p>
</body>
</html>
我們再新建一個公共的父模版base.html,其他子模板繼承即可,共同部分比如header,footer繼承下來,不同的部分自己實現。這里可以通過block標簽在父類先預留一塊。然后子類實現block即可。include標簽引入公共模塊。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}默認標題{% endblock %}</title>
</head>
<body>
{% include 'header.html' %}
{% block content %}默認內容
{% endblock %}
{% include 'footer.html' %}
</body>
</html>
新建博客首頁index.html,通過extends繼承base.html,以及重寫實現block title和content
{% extends "base.html" %}
{% block title %}博客首頁
{% endblock %}
{% block content %}博客列表
{% endblock %}
同理博客帖子頁面detail.html
{% extends "base.html" %}
{% block title %}博客帖子
{% endblock %}
{% block content %}博客帖子
{% endblock %}
user.py里實現下視圖函數:
@user_bp.route('/index')
def index():return render_template('index.html')@user_bp.route('/detail')
def detail():return render_template('detail.html')
我們測試下: