首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flask中的多模板渲染

在 Flask 中,有时候我们需要在一个视图函数里渲染多个模板并将结果组合在一起

  1. 首先,创建一个名为 templates 的文件夹,然后在该文件夹中创建两个模板文件(例如 header.htmlfooter.html)。

header.html:

代码语言:javascript
复制
<!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:

代码语言:javascript
复制
    <footer>
      <p>&copy; 2021 My Site. All rights reserved.</p>
    </footer>
  </body>
</html>
  1. templates 文件夹中,创建一个名为 content.html 的模板文件,以便我们可以在视图中动态地替换内容。

content.html:

代码语言:javascript
复制
    <main>
      <h2>{% block content_title %}Default Content Title{% endblock %}</h2>
      <p>{% block content %}Default Content{% endblock %}</p>
    </main>
  1. app.py 文件中,编写一个视图函数,分别渲染 header.htmlcontent.htmlfooter.html,并将结果组合在一起。

app.py:

代码语言:javascript
复制
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.htmlcontent.htmlfooter.html,然后将这些部分组合成一个完整的 HTML 页面。

这种方法允许你将页面的各个部分(如头部、内容和底部)分离成单独的模板文件,便于管理和重用。

如果你有多个视图函数需要使用相同的头部和底部,你可以将它们封装在单独的函数中,然后在每个视图函数中调用这些函数。

例如:

代码语言:javascript
复制
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

这样,你就可以轻松地在多个视图函数中重用头部和底部模板。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券