首页
学习
活动
专区
工具
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

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

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

相关·内容

  • 测试之路 python-flask框架:模板渲染

    哈喽,大家好,我是小王,上期我们说道路由与蓝图的概念,本期我们就来说说模板渲染 01 模板渲染 Jinja2是flask中的一个必不可少的模板渲染引擎,主要作用就是渲染一个有富文本标签的页面,使用者能够更好的通过...render_template()方法,就是渲染的主要函数。...(虽然我们就是写一个简单测试工具,不涉及那么多,但是要严格要求自己按照正常标准走。...我们开发的就是一个web项目) 写完html文件后,我们就回到视图函数中,首先使用render_template()渲染模板。...补充一下:在apps的__init__文件中,需要将模板路径传给flask对象。否则会找不到模板路劲。 03 总结 以上就是为大家分享的内容。主要还是以本人日常工作所编写的脚本的整体流程为参考。

    77020

    【Flask】Flask框架中的模板代码复用

    继承 模板继承是为了重用模板中的公共内容。一般Web开发中,继承主要使用在网站的顶部菜单、底部。这些内容可以定义在父模板中,子模板直接继承,而不需要重复书写。...子模板使用extends指令声明这个模板继承自哪个模板 父模板中定义的块在子模板中被重新定义,在子模板中调用父模板的内容可以使用super() 父模板 base.html {% block top %}...%} {{ super() }} 需要填充的内容 {% endblock content %} 模板继承使用时注意点: - 不支持多继承 - 为了便于阅读,在子模板中使用...包含 Jinja2模板中,包含(Include)的功能是将另一个模板整个加载到当前模板中,并直接渲染。...继承(Block)的本质是代码替换,一般用来实现多个页面中重复不变的区域。 包含(include)是直接将目标模板文件整个渲染出来。

    54820

    Python Web Flask源码解读(三)——模板渲染过程

    Github:https://github.com/hylinux1024 微信公众号:angrycode 前面对 Flask启动流程和路由原理都进行了源码走读。今天我们看看模板渲染的过程。...0x00 使用模板 首先看一个来自官方文档使用模板渲染的例子 from flask import render_template @app.route('/hello/') @app.route('/... {% endif %} 这个模板中 name是参数,通过调用 render_template方法就可以根据参数实现 html模板文件的渲染。...所以当请求来临时,就会把当前 Flask实例的请求上下文实例保存到栈实例 _request_ctx_stack中;请求处理后,就从栈里面弹出当前请求的上下文实例。...这个是 jinja模板引擎提供的类, Flask框架的模板渲染就是通过 jinja来实现的。

    93220

    Flask 中的Jinja2模板引擎

    在 Web 项目中,前端的显示效果是通过 HTML 语言来实现的,后端的视图函数将数据或模板文件返回给前端。 前端接收到后端返回的结果后,需要通过模板引擎来渲染页面,控制显示的效果。...模板是一个包含响应文本的 HTML 文件,可以在模板中用变量表示动态部分,视图函数将具体的值传给模板,模板引擎会根据变量的值进行渲染。 写好模板文件后,视图函数可以直接返回一个模板文件。...Flask 是 Python 实现的 Web 框架中应用最广泛的框架之一,Jinja2 是 Flask 框架内置的模板语言,所以使用也很广泛。...视图函数中处理完业务逻辑之后,将处理好的数据传给模板文件,然后将模板文件返回。这样 Jinja2 模板引擎会将最后的页面渲染成前端展示的页面。 ?...也就是说,在 Flask 的视图函数中返回模板文件时,会默认从 templates 开始,根据视图函数中返回的文件路径和模板文件名来找到对应的模板文件,返回给前端。 2.

    1.7K40

    【Flask】flask框架模板中自定义过滤器

    自定义过滤器 过滤器的本质是函数。当模板内置的过滤器不能满足需求,可以自定义过滤器。...自定义过滤器有两种实现方式: 一种是通过Flask应用对象的 add_template_filter 方法 一种是通过装饰器来实现自定义过滤器 重要:自定义的过滤器名称如果和内置的过滤器重名,会覆盖内置的过滤器...示例:自定义数组反转过滤器 方式一 通过调用应用程序实例的add_template_filter方法实现自定义过滤器。...该方法第一个参数是函数名,第二个参数是自定义的过滤器名称: def do_list_reverse(list): list.reverse() return list app.add_template_filter...装饰器传入的参数是自定义的过滤器名称。

    36120

    带你认识 flask 的模板

    为梦想而战,带你回顾一下上一节的内容,主要是带大家如何在浏览器上打印出 hello world 教你如何使用 flask 框架在浏览器打印 hello world 在终端会话中设置环境变量FLASK_APP...网页渲染转移到HTML模板之后,视图函数就能被简化: from flask import render_template from app import app @app.route('/') @app.route...为了渲染模板,需要从Flask框架中导入一个名为render_template()的函数。该函数需要传入模板文件名和模板参数的变量列表,并返回模板中所有占位符都用实际变量值替换后的字符串结果。...render_template()函数调用Flask框架原生依赖的Jinja2模板引擎。Jinja2用render_template()函数传入的参数中的相应值替换{{...}}块。...从本质上来讲,就是将所有模板中相同的部分转移到一个基础模板中,然后再从它继承过来。 所以我现在要做的是定义一个名为base.html的基本模板,其中包含一个简单的导航栏,以及我之前实现的标题逻辑。

    1K10

    在 Django 模板中渲染并行数组

    在 Django 模板中渲染并行数组通常涉及使用模板语言中的循环结构来遍历和展示数组中的每个元素。...假设你有一个名为 items 的数组,你可以按照以下方式在 Django 模板中渲染它: {% for item in items %} {{ item }} {%...每次迭代循环时,变量 item 将代表数组中的一个元素,并通过 {{ item }} 的方式插入到 HTML 中。如果 items 是一个包含字典或对象的列表,你可以使用点表示法访问它们的属性。...> {% endfor %}这种方法使得在 Django 模板中展示和渲染多个数组元素非常方便和灵活。...1、问题背景在使用 Django 渲染模板时,有时需要同时渲染两个数组的数据,一个数组是需要输出的数据,另一个数组是用于删除项的表单集。

    5910

    Vue模板渲染的原理是什么

    vue中的模板template无法被浏览器解析并渲染,因为这不属于浏览器的标准,不是正确的HTML语法,所有需要将template转化成一个JavaScript函数,这样浏览器就可以执行这一个函数并渲染出对应的...generate阶段:将最终的AST转化为render函数字符串。 平时使用模板时,可以在模板中使用变量、表达式或者指令等,这些语法在html中是不存在的,那vue中为什么可以实现?...这就归功于模板编译功能。 模板编译的作用是生成渲染函数,通过执行渲染函数生成最新的vnode,最后根据vnode进行渲染。那么,如何将模板编译成渲染函数?...由于静态节点不需要总是重新渲染,所以生成AST之后,生成渲染函数之前这个阶段,需要做一个优化操作:遍历一遍AST,给所有静态节点做一个标记,这样在虚拟DOM中更新节点时,如果发现这个节点有这个标记,就不会重新渲染它...所以,在大体逻辑上,模板编译分三部分内容: 1、将模板解析成AST 2、遍历AST标记静态节点 3、使用AST生成渲染函数 这三部分内容在模板编译中分别抽象出三个模块实现各自的功能:解析器、优化器和代码生成器

    1.5K11

    Flask模板中可以直接访问的特殊变量和方法

    Flask中的特殊变量和方法 在Flask中,有一些特殊的变量和方法是可以在模板文件中直接访问的。...request常用的属性如下: 属性 说明 类型 data 记录请求的数据,并转换为字符串 * form 记录请求中的表单数据 MultiDict args 记录请求中的查询参数 MultiDict cookies...记录请求中的cookie信息 Dict headers 记录请求中的报文头 EnvironHeaders method 记录请求使用的HTTP方法 GET/POST url 记录请求的URL地址 string...{{ url_for('index') }} {{ url_for('post', post_id=1024) }} get_flashed_messages方法: 返回之前在Flask中通过 flash...基于flash的这种特性,就跟Django中的messages一样,最适合用来做切换页面的消息提示框了。

    2.2K10

    Flask Jinja2 模板中的变量和过滤器

    Flask 可以在视图函数中返回模板文件,模板引擎默认使用的是 Jinja2 。 通常,返回的 Jinja2 模板文件并不是一个静态的页面,而是同时有静态部分和动态部分。...一、向 Jinja2 模板文件中传入变量 在 Flask 的视图函数中,将变量的值传递给模板文件。传递的数据类型可以是数字,字符串,列表,字典等所有 Python 中的数据类型。...参考:Flask 中的Jinja2模板引擎 2. 实现视图函数 在项目文件夹 FlaskProject 下创建一个 flask_jinja2.py 文件,在里面定义需要传递的变量数据和视图函数。...运行后端 Flask APP 服务器,对应的路由是 /args,/args 路由对应的视图函数是 temp_jinja2() ,temp_jinja2() 中给模板文件传递了字典 data ,最后返回模板文件...8. striptags:页面渲染之前把变量值中所有的 HTML 标签都删掉。 9. truncate: 字符串截取。 10. first:取列表或迭代器中的第一个元素。

    2.8K40

    Flask(3)- Flask 中的 HTTP 方法

    self:就是 Flask 类的实例 rule:其实就是路由规则 end_point:函数名 methods:如果没有传,那么会先通过 view_func 获取 methods 属性,如果还是没有,那默认就是...GET,记得这是个列表 [ ] 结论 默认的 app.route() 是仅支持 GET 请求的,如果想通过 POST、PUT、DELTE 等方法正常请求的话,需要添加 methods 参数哦 GET...踩坑之一:哎呀,假设我用 GET 方法发起请求,那么就会直接报 405,说你的请求方法是不允许的!记住了哦! ?...要记住,如果 return 的是字典,那么请求得到的响应数据是 Json 格式哦 PUT、DELETE 请求的栗子 代码 @app.route('/delandput', methods=["DELETE...怎么报错了...仔细一看,错误信息已经提示的很清楚了,视图函数的返回值类型只能是 string、dict、tuple 正确的代码 @app.route('/delandput', methods=["DELETE

    76120

    类webpack模板的多页Vue项目模板

    这里写一下说明文件和心得体会 配置功能 最基本的功能为webpack3+Vue2的基础上引入了外部组件库elementUI 其实也可以灵活修改为别的,css的支持仅引入了less和sass,相信这两者用的人也是最多的...还有一点是针对多页面也引入了vue-router, 也就是说这个多页面仓库也可以当单页面来搞起。...加入的axios库是本地业务所需,这个可以在生成脚手架时不选择,但这个作为Vue的推荐库,建议尽量用这个,坑比较少。...多页面入口的设置是参照element-starter来做的,特点是文件目录结构一定是要遵循上述规定,具体参考github中的README文档 项目的配置细节大部分都在config目录下,熟悉vue-cli.../webpack模板的应该都很容易看懂,因为只多了一项openPage其余基本相同 编写模板体会 通过双大括号来处理文本的渲染。

    2K60

    Flask模板中可以直接访问的特殊变量和方法

    Flask中的特殊变量和方法 在Flask中,有一些特殊的变量和方法是可以在模板文件中直接访问的。...request常用的属性如下: 属性 说明 类型 data 记录请求的数据,并转换为字符串 * form 记录请求中的表单数据 MultiDict args 记录请求中的查询参数 MultiDict cookies...记录请求中的cookie信息 Dict headers 记录请求中的报文头 EnvironHeaders method 记录请求使用的HTTP方法 GET/POST url 记录请求的URL地址 string...{{ url_for('index') }} {{ url_for('post', post_id=1024) }} get_flashed_messages方法: 返回之前在Flask中通过 flash...基于flash的这种特性,就跟Django中的messages一样,最适合用来做切换页面的消息提示框了。

    1.3K20
    领券