Flask学习笔记 - 模板渲染

python的flask框架入门,学习笔记 课程链接:2024版-零基础玩转Python Flask框架-学完可就业_哔哩哔哩_bilibili项目目录结构: 没有开启该模式,网页不会即时渲染,需要关闭程序重新运行;开启debug后可以即时渲染,只要保存即可,ctrl+s如果开发的时候出现bug,在浏览器上就可以看到出错信息开启:PyCharm 中选择Edit configuirations,在弹出的界面中勾选debug另一种debug开启方式是直接在程序中修改: 主要作用:让别的电脑访问你的flask项目主要的左右:防止端口被占 阅读详情

Flask 模板渲染

模板是包含占位符的 HTML 文件

Flask 使用 Jinja2 模板引擎来处理模板渲染。模板渲染允许你将动态内容插入到 HTML 页面中,使得应用能够生成动态的网页内容。

  1. 创建模板:将 HTML 文件放在 templates 文件夹中,使用 Jinja2 占位符。
  2. 渲染模板:使用 render_template 函数在视图函数中渲染模板。
  3. 模板继承:创建基础模板,允许其他模板继承和扩展。
  4. 控制结构:使用条件语句和循环在模板中控制逻辑。
  5. 过滤器:使用过滤器格式化变量数据。
  6. 宏和模板包含:创建和使用宏以及模板包含,提高模板的复用性。
  7. 安全性:Jinja2 默认对模板变量进行自动转义以防止 XSS 攻击。
  8. 模板上下文:将数据传递给模板,并在模板中使用这些数据。

基本概念/创建模板

模板是包含占位符的 HTML 文件。

Flask 使用 Jinja2 模板引擎来渲染这些模板,将 Python 数据插入到 HTML 中,从而生成最终的网页。

<!DOCTYPE html>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <p>Hello, {{ name }}!</p>
</body>
</html>

app.py

from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index.html',title='Home',name='Misha')

if __name__ == '__main__':
    app.run(debug=True)

格式: {{ 变量名 }}

01.png

模板继承

root.html

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}My Website{% endblock %}</title>
</head>
<body>
    <header>
        <h1>My Website</h1>
    </header>
    <main>
        {% block content %}{% endblock %}
    </main>
    <footer>
        <p>Footer content</p>
    </footer>
</body>
</html>

leaf.html

{% extends "root.html" %}

{% block title %}Home Page{% endblock %}

{% block content %}
<h2>Welcome to the Home Page!</h2>
<p>Content goes here.</p>
{% endblock %}

app.py

@app.route('/leaf')
def leaf():
    return render_template('leaf.html')

检查响应的内容确实被替换了

02.png

格式:可替换区域 {% block 变量名 %} {% endblock %}

控制结构

Jinja2 提供了多种控制结构,用于在模板中实现条件逻辑和循环。

ctrl_flow.html

<!DOCTYPE html>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <!-- 条件语句 -->
    {% if user %}
    <p>Welcome, {{ user }}!</p>
    {% else %}
    <p>Please log in.</p>
    {% endif %}
    
    <!-- 循环语句 -->
    <ul>
        {% for item in items %}
        <li>{{ item }}</li>
        {% endfor %}
    </ul>
</body>
</html>

app.py

@app.route('/ctrl_flow')
def ctrl_flow():
    # return render_template('ctrl_flow.html',user="Zhangsan")
    # return render_template('ctrl_flow.html')
    return render_template('ctrl_flow.html',user="Zhangsan",items=['apple','banana','orange'])

传了user
03.png

未传user和items
04.png

传了user和items
05.png

过滤器

过滤器用于在模板中格式化和处理变量数据。

filter.html

<!DOCTYPE html>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
<p>{{ name|capitalize }}</p>
<p>{{ price|round(2) }}</p>
</body>
</html>

app.py

@app.route('/filter')
def filter():
    return render_template('filter.html',name='wangwu',price=2.999)

过滤器的写法与shell中的管道一样都是用"|"来表示

格式: {{ 变量名|处理方法 }}

06.png

宏和模板包含

macros.html

{% macro render_item(item) %}
    <div>
        <h3>{{ item.title }}</h3>
        <p>{{ item.description }}</p>
    </div>
{% endmacro %}

使用宏: macros_demo.html

{% from "macros.html" import render_item %}

<h1>Items</h1>
{% for item in items %}
    {{ render_item(item) }}
{% endfor %}

app.py

@app.route('/macros')
def macros():
    # return render_template('macros_demo.html',items=['apple','banana','orange'])
    return render_template('macros_demo.html',items=[{"title":"apple","description":"苹果"},{"title":"banana","description":"香蕉"},{"title":"orange","description":"橘子"}])

变量不正确时的效果

07_1.png

正常的显示

07_2.png

安全性

security.html

<html>
<head> security </head>
<body>
<p>{{ user_input }}</p>
</body>
</html>
@app.route('/xss')
def xss():
    return render_template('security.html',user_input='<script> alert(1) </script>')

自动转义:Jinja2 默认会对模板中的变量进行自动转义,防止 XSS 攻击。

<script>标签不会被认为是html元素

08.png

模板上下文

视图函数中传递的变量成为模板的上下文,这些变量可以在模板中直接使用。

profile.html

<h1>{{ user.name }}</h1>
<p>Age: {{ user.age }}</p>

app.py

@app.route('/profile/<username>')
def profile(username):
    user = {'name': username, 'age': 25}
    return render_template('profile.html', user=user)

09.png

Demo

Flask

参考

  1. Flask模板渲染
【python】flask模板渲染引擎Jinja2,通过后端数据渲染前端页面 Flask内置的模板引擎Jinja2,它的设计思想来源于 Django 的模板引擎DTP(DjangoTemplates),并扩展了其语法和一系列强大的功能。 Flask提供的 render_template 函数封装了该模板引擎Jinja2 render_template 函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的数据值。 阅读详情

相关推荐

云计算学习——5G网络技术

华为eNSP网络设备模拟器的基础安装及简单使用

qq_42520799的博客 1445

Flask 学习笔记(三)-模板渲染

模板渲染 使用pycharm创建Flask项目 默认结构 static (存放静态资源) templates (存放模板文件) renderFlask.py 在static 中创建css文件夹,在/static/css/中创建hello_css.css文件 vi hello_css.css h2{ color:green; } p{ color:r...

Sajor的博客 296

Jetson Nano官方镜像下载&烧录

在NVIDIA Jetson Nano开发者套件上安装NVIDIA官方Ubuntu镜像

weixin_44222088的博客 8854

flask学习笔记(四):渲染模板和参数

1、渲染模板 需要先导入render_templatem模块,然后先在文件所在目录创建一文件夹,命名为templates,然后在文件夹中新建一个html网页文件。(渲染时框架会自动寻找网页文件,不必添加"templates"这个路径,这是由flask框架决定的) &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &...

观月执白 2010

鸿蒙之HML语法参考

HML(HarmonyOS Markup Language)是一套类HTML的标记语言,通过组件,事件构建出页面的内容。页面具备数据绑定、事件绑定、条件渲染和逻辑控制等高级能力。

2401_82772199的博客 1649

从零到一:3D-ResNet50在医学影像中的实战陷阱与避坑指南

本文深入探讨了3D-ResNet50在医学影像分类中的实战应用,重点解析了NIFTI数据预处理、小样本迁移学习陷阱及GPU显存优化等关键问题。通过分块加载、混合精度训练等技巧,有效解决了医学影像处理中的内存管理和性能挑战,为开发者提供了实用的避坑指南和优化策略。

weixin_29038345的博客 392

python学习笔记——flask之初步认识渲染模板(Jinja2)

个人理解: 视图函数直接return数据到浏览器,return的信息拼凑成html比较麻烦(python语法拼凑html)。 为了保证html格式变化不大的情况下拼凑html数据====》html里嵌入python数据===》生成最终的html===》返回到前端 一、寻找开发文档 https://dormousehole.readthedocs.io/en/latest/ 二、案例1 1.准备 1.app同目录下,创建templates文件夹(注意有s),这个文件夹里面放置..

小橙子的博客 602

YOLOv8-Pose 姿态识别 RK3588 实战:从模型训练到 RKNN 部署,精度与推理速度双提升

本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

FJN110的博客 364

python学习笔记——flask之渲染模板(Jinja2)过滤器

目录 一、案例展示 application.py index.html 二、原理解释 1.{{name | trim}}中name为传进来的变量名,trim为实现过滤功能的方法名,它俩之间一个竖杠 2.相当于 将name传进trim()方法里进行处理(过滤),return返回处理后的数据,作为{{ }}最终的结果。 三、过滤方法有哪些? 1.官方文档查看 2.过滤方法分类 3.注意:支持链式使用过滤器 四、自定义过滤器(过滤器就是一个函数) 自定义函数 注册过滤器方式一: ..

小橙子的博客 708

第7次CCF PTA编程培训师资认证-T1 真题解析(2024下)

B。

lan_in的博客 513

CAN(2)-GD32

GD32中CAN的特征。

小柚子的博客 553

【python-flask学习笔记】2.1-2.2Jinja2模版-传参和模板中访问参数

2.1 Flask渲染Jinja2模板和传参 (1)如何渲染模板 * 模板放在'templates'文件夹下。(如新建个'index.html'文件) * 从'flask'中导入'render_template'函数。 * 在视图函数中使用'render_template'函数,渲染模板,注意:只需填写模板名称,不要填写templates这个文件夹的路径,因为该文件夹是项目默a认的静态文...

Aboil的博客 602

视觉Transformer实战 | Vision Transformer(ViT)详解与实现

在计算机视觉领域,卷积神经网络 (CNN) 长期以来一直是处理图像任务的主流架构。然而,随着 Transformer 在自然语言处理领域的巨大成功,研究人员开始探索将这种基于自注意力机制的架构应用于视觉任务。Vision Transformer (ViT) 是这一探索的重要里程碑,它首次证明了纯 Transformer 架构在图像分类任务上可以超越最先进的 CNN 模型。本文将详细介绍 ViT 的技术原理,并使用 PyTorch 从零开始构建 ViT 模型用于图像分类任务。

盼小辉丶的博客 4万+

python学习笔记——flask之渲染模板(Jinja2)-特殊变量和方法

在Flask中,有一些特殊的变量和方法是可以在模板文件中直接访问的。 一、config 对象: config 对象就是Flask的config对象,也就是 app.config 对象 {{ config.SQLALCHEMY_DATABASE_URI }} 二、request 对象 {{ request.url }} 三、url_for 方法 {{ url_for('index') }} {{ url_for('post', post_id=1024) }} 四、get_flash

小橙子的博客 839

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

python学习笔记——flask之渲染模板(Jinja2)-宏的概念

一、宏 类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余。 二、定义和使用 1.不带参数宏的定义与使用(macro相当于python的def关键字) 定义 {% macro input() %} <input type="text" name="username" value="" size="30"/> {% endmacro %} 使用 {{ input() }} 2.带参数宏的定义与使用

小橙子的博客 526

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

python后端:Flask框架学习笔记

其实就是,如果我要访问一个数据,每天访问很多次,都是这个数据访问时##间又特别长,那么我们就加上这个cache,使得第一次加载的时候满,之后每一次加载直##接读缓存,节省时间,timeout=30是缓存的有效时间。g对象在一次请求中的所有的代码的地方,都是可以使用的突破变量存储位置限制, 为数据传递添加了新的方式, 比如我们在before_request产生一个数据在后面需要使用,可以保存在g对象中,在其他视图函数中就可以使用这个数据。所以我们要引入一个新概念,叫做蓝图blueprint。

qq_73099889的博客 2735

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

flask学习笔记(四):利用render_template()渲染html

基础 render_template()有什么用 在Python代码中 直接生成 HTML 缺点很多,比如笨拙,效率低,可读性差。因此, Flask 提供了 Jinja2 模板引擎来帮助开发者高效灵活生成HTML。 使用该方法可以渲染模板,你只要提供模板名称和需要作为参数传递给模板的变量就行了。 html模板文件的位置 模板即自己写好的模板html文件,需要放在templates文件夹内。目录结构如下: /application.py /templates /hello.html 或者 /appl

碧海蓝天 1万+

轻量级Web框架——Flask的新人教程笔记

Flask笔记 注:本篇博客只是作为博主的笔记,想要深入学习的同学还是要观看官方教程。 前沿 “微”:核心简单,易于扩展 --> 不包含许多已有库胜任的功能,但支持扩展。 个人理解:相当于提供一系列接口,开发人员可以根据自身需求进行定制; 快速入门 一个最小的应用 from flask import Flask app = Flask(__name__) @app.route('/') d...

lost-person的博客 336

Flask 模板渲染

模板是包含占位符的 HTML 文件。Flask 使用 Jinja2 模板引擎来处理模板渲染。模板渲染允许你将动态内容插入到 HTML 页面中,使得应用能够生成动态的网页内容。以下是关于 Flask 模板渲染的详细说明,包括如何创建和使用模板、模板继承、控制结构等。templates。

zhao1iyong的博客 1837

Flask 第八课 -- 模板渲染

模板是包含占位符的 HTML 文件。Flask 使用 Jinja2 模板引擎来处理模板渲染。模板渲染允许你将动态内容插入到 HTML 页面中,使得应用能够生成动态的网页内容。以下是关于 Flask 模板渲染的详细说明,包括如何创建和使用模板、模板继承、控制结构等。templates。

蜡笔小流的博客 1801

如何使用Flask渲染模板

Flask使用Jinja2模板引擎来渲染模板,通过视图函数将动态数据传递给模板,并生成最终的HTML页面。Jinja2模板语法提供了丰富的功能,包括控制结构、过滤器、模板继承和包含等,使得开发者能够灵活地生成复杂的动态网页内容。同时,开发者还需要注意模板渲染过程中的安全性问题,并采取适当的措施来保护用户数据。

sheji888的专栏 1516

Flask(四) 模板渲染render_template

Flask 使用 Jinja2 模板引擎来处理模板渲染。模板渲染允许你将动态内容插入到 HTML 页面中,使得应用能够生成动态的网页内容。

weixin_40203719的博客 1290

flask--渲染Jinja模板与传入模板变量

1. 模板简介 模板是一个web开发中必备的模块,因为我们在渲染一个网页的时候,并不只是渲染了一个纯文本字符窜,而是渲染一个有富文本标签的页面,这个时候我们就需要用到模板了。在flask中,配套的模板是Jinja2,Jinja2的作者也是flask的作者。 2. flask中渲染模板 在flask中,如果我们需要渲染一个模板,那么我们就需要用到render_template这个方法了。 在我们新建...

xujin0的博客 3449
上一篇: Flask学习笔记 - 视图函数
下一篇: Flask学习笔记 - 表单
忘川三
博客等级 码龄12年 208粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值