在 Flask 中,有时候我们需要在一个视图函数里渲染多个模板并将结果组合在一起
templates
的文件夹,然后在该文件夹中创建两个模板文件(例如 header.html
和 footer.html
)。header.html:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{% block title %}My Site{% endblock %}</title>
</head>
<body>
<header>
<h1>My Site</h1>
</header>
footer.html:
<footer>
<p>© 2021 My Site. All rights reserved.</p>
</footer>
</body>
</html>
templates
文件夹中,创建一个名为 content.html
的模板文件,以便我们可以在视图中动态地替换内容。content.html:
<main>
<h2>{% block content_title %}Default Content Title{% endblock %}</h2>
<p>{% block content %}Default Content{% endblock %}</p>
</main>
app.py
文件中,编写一个视图函数,分别渲染 header.html
、content.html
和 footer.html
,并将结果组合在一起。app.py:
from flask import Flask, render_template_string
app = Flask(__name__)
@app.route('/')
def index():
header = render_template_string(open('templates/header.html').read())
content = render_template_string(open('templates/content.html').read(), content_title="Welcome!", content="This is the home page.")
footer = render_template_string(open('templates/footer.html').read())
return header + content + footer
if __name__ == '__main__':
app.run(debug=True)
现在,当你访问 /
路径时,Flask 将分别渲染 header.html
、content.html
和 footer.html
,然后将这些部分组合成一个完整的 HTML 页面。
这种方法允许你将页面的各个部分(如头部、内容和底部)分离成单独的模板文件,便于管理和重用。
如果你有多个视图函数需要使用相同的头部和底部,你可以将它们封装在单独的函数中,然后在每个视图函数中调用这些函数。
例如:
def render_header():
return render_template_string(open('templates/header.html').read())
def render_footer():
return render_template_string(open('templates/footer.html').read())
@app.route('/')
def index():
header = render_header()
content = render_template_string(open('templates/content.html').read(), content_title="Welcome!", content="This is the home page.")
footer = render_footer()
return header + content + footer
@app.route('/about')
def about():
header = render_header()
content = render_template_string(open('templates/content.html').read(), content_title="About Us", content="This is the about page.")
footer = render_footer()
return header + content + footer
这样,你就可以轻松地在多个视图函数中重用头部和底部模板。
云+社区沙龙online [国产数据库]
企业创新在线学堂
“中小企业”在线学堂
腾讯位置服务技术沙龙
T-Day
Techo Day
企业创新在线学堂
云原生正发声
云原生正发声
“中小企业”在线学堂
云原生正发声
领取专属 10元无门槛券
手把手带您无忧上云