三周精通FastAPI:35 最常用的模板引擎Jinja2

官方文档:https://fastapi.tiangolo.com/zh/advanced/templates/

模板¶

FastAPI 支持多种模板引擎。

Flask 等工具使用的 Jinja2 是最常用的模板引擎。

在 Starlette 的支持下,FastAPI 应用可以直接使用工具轻易地配置 Jinja2。

安装依赖项¶

安装 jinja2

pip install jinja2

使用 Jinja2Templates

  • 导入 Jinja2Templates
  • 创建可复用的 templates 对象
  • 在返回模板的路径操作中声明 Request 参数
  • 使用 templates 渲染并返回 TemplateResponse, 传递模板的名称、request对象以及一个包含多个键值对(用于Jinja2模板)的"context"字典,
 
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates

app = FastAPI()

app.mount("/static", StaticFiles(directory="static"), name="static")


templates = Jinja2Templates(directory="templates")


@app.get("/items/{id}", response_class=HTMLResponse)
async def read_item(request: Request, id: str):
    return templates.TemplateResponse(
        request=request, name="item.html", context={"id": id}
    )

"笔记"

在FastAPI 0.108.0,Starlette 0.29.0之前,name是第一个参数。 并且,在此之前,request对象是作为context的一部分以键值对的形式传递的。

"提示"

通过声明 response_class=HTMLResponse,API 文档就能识别响应的对象是 HTML。

"技术细节"

您还可以使用 from starlette.templating import Jinja2Templates

FastAPI 的 fastapi.templating 只是为开发者提供的快捷方式。实际上,绝大多数可用响应都直接继承自 Starlette。 Request 与 StaticFiles 也一样。

编写模板¶

编写模板 templates/item.html,代码如下:

<html>
<head>
    <title>Item Details</title>
    <link href="{{ url_for('static', path='/styles.css') }}" rel="stylesheet">
</head>
<body>
    <h1><a href="{{ url_for('read_item', id=id) }}">Item ID: {{ id }}</a></h1>
</body>
</html>

模板上下文¶

在包含如下语句的html中:

Item ID: {{ id }} 

...这将显示你从"context"字典传递的 id:

{"id": id} 

例如。当ID为 42时, 会渲染成:

Item ID: 42 

模板 url_for 参数¶

你还可以在模板内使用 url_for(),其参数与路径操作函数的参数相同.

所以,该部分:

<a href="{{ url_for('read_item', id=id) }}"> 

...将生成一个与处理路径操作函数 read_item(id=id)的URL相同的链接

例如。当ID为 42时, 会渲染成:

<a href="/items/42"> 

模板与静态文件¶

你还可以在模板内部将 url_for()用于静态文件,例如你挂载的 name="static"的 StaticFiles

 
    <link href="{{ url_for('static', path='/styles.css') }}" rel="stylesheet">

本例中,它将链接到 static/styles.css中的CSS文件:

h1 { color: green; } 

因为使用了 StaticFiles, FastAPI 应用会自动提供位于 URL /static/styles.css的 CSS 文件。

更多说明¶

包括测试模板等更多详情,请参阅 Starlette 官方文档 - 模板。

实践

写文件

将FastAPI网站文件写入templates.py文件

from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates

app = FastAPI()

app.mount("/static", StaticFiles(directory="static"), name="static")


templates = Jinja2Templates(directory="templates")


@app.get("/items/{id}", response_class=HTMLResponse)
async def read_item(request: Request, id: str):
    return templates.TemplateResponse(
        request=request, name="item.html", context={"id": id}
    )

 编写模板 templates/item.html,代码如下:

<html>
<head>
    <title>Item Details</title>
    <link href="{{ url_for('static', path='/styles.css') }}" rel="stylesheet">
</head>
<body>
    <h1><a href="{{ url_for('read_item', id=id) }}">Item ID: {{ id }}</a></h1>
</body>
</html>

启动服务

uvicorn templates:app --reload

测试

使用curl进行测试,执行:

curl 127.0.0.1:8000/items/123

返回html模版和变量信息:

<html>
<head>
    <title>Item Details</title>
    <link href="http://127.0.0.1:8000/static/styles.css" rel="stylesheet">
</head>
<body>
    <h1><a href="http://127.0.0.1:8000/items/123">Item ID: 123</a></h1>
</body>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/910268.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI 搜索来势汹汹,互联网将被颠覆还是进化?

最近&#xff0c;美国新闻集团起诉了知名 AI 搜索引擎 Perplexity AI。也许你会想&#xff0c;这不就是又一起“AI 惹官司”吗&#xff1f;其实&#xff0c;这次情况不太一样&#xff0c;甚至可能会改变我们未来上网的方式&#xff01; 争议的焦点是什么&#xff1f;是未来的 …

微信小程序官方评价组件wxacommentplugin下线后如何巧妙调用

在前一段时间微信小程序官方下线了评价组件后&#xff0c;无法再申请到了&#xff0c; 先来说说小程序什么情况下弹出评价&#xff1f; 1.官方邀请用户评价 用户通过搜索使用过小程序后&#xff0c;官方会邀请用户对小程序的使用体验进行评价。这个是系统随机的&#xff0c;…

Nat Med 病理AI系列|人工智能在肝病临床试验中的应用·顶刊精析·24-11-06

小罗碎碎念 今天分析Nature Medicine病理AI系列的第6篇文章——《AI-based automation of enrollment criteria and endpoint assessment in clinical trials in liver diseases》。 这篇文章介绍了一种基于人工智能的测量工具AIM-MASH&#xff0c;它能够提高非酒精性脂肪性肝…

AWG5200系列-美国泰克AWG5202/5204/5208任意波形

AWG5200系列-美国泰克AWG5202/5204/5208任意波形 美国泰克AWG5202/5204/5208任意波形发生器AWG5200可满足苛刻的信号生成需求&#xff0c;具有高信号保真度&#xff0c;支持多台同步&#xff0c;可扩展到zui多32条及以上通道&#xff0c;高性价比。是高级研究、电子测试和雷达、…

SpringBoot在城镇住房保障系统中的应用案例

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了城镇保障性住房管理系统的开发全过程。通过分析城镇保障性住房管理系统管理的不足&#xff0c;创建了一个计算机管理城镇保障性住房管理系统的方案。文章介绍了城…

无需专业技能,快速上手本地部署Llama3:让你的个人电脑也能高效运行

大家好&#xff0c;我是斜杠君。今天手把手教大家如何在本地部署Llama3&#xff0c;打造一个属于自己的本地大模型助手。 在教大家部署Llama3之前&#xff0c;先要带大家了解一个概念&#xff1a;Ollama。 Ollama是什么&#xff1f; Ollama是一个用于在本地计算机上运行大型语言…

使用Python和OpenCV实现火焰检测

使用Python和OpenCV实现火焰检测 项目解释&#xff1a; 此 Python 代码是使用 OpenCV、线程、声音和电子邮件功能的火灾探测系统的简单示例。 以下是它的功能的简单描述&#xff1a; 导入库&#xff1a;代码首先导入必要的库&#xff1a; cv2&#xff1a;用于图像和视频处理…

异步4位计数器(Quartus与Modelsim联合仿真)

异步计数器&#xff08;也称为ripple-through counter&#xff09;的特点是每一位触发器的输出作为下一位触发器的时钟输入&#xff0c;因此计数速度会因为级联触发器的传播延迟而受到限制。这种计数器的最大工作频率通常低于同步计数器。 一、电路符号 输入信号&#xff1a;时…

EDA技术简介

目录 可编程逻辑器件 CPLD/FPGA 基于查找表结构的FPGA 硬件描述语言 EDA软件 EDA技术的 应用领域 电子系统的设计方法 EDA (Electronic Design Automation,电子设计自动化) 以可编程逻辑器件 (Programmable Logic Device,简称PLD)为实现载体、以硬件描述语言 (Hardwar…

【The Art of Unit Testing 3_自学笔记06】3.4 + 3.5 单元测试核心技能之:函数式注入与模块化注入的解决方案简介

文章目录 3.4 函数式依赖注入技术 Functional injection techniques3.5 模块化依赖注入技术 Modular injection techniques 写在前面 上一篇的最后部分对第三章后续内容做了一个概括性的梳理&#xff0c;并给出了断开依赖项的最简单的实现方案&#xff0c;函数参数值注入法。本…

如何打开别人的 vsqt 代码?QString 中有中文的时候,如何转换中文?

如何打开别人的 vsqt 代码&#xff1f; 我们下载了 一段源码。并且知道这个源码的关于 音视频的&#xff0c;那么八成会用到ffmpeg 假设我们源码下载后&#xff0c;位置在D:\downloadcode\112_yuv_rgb_player 第一步就是删除.vs 和debug&#xff0c;因为这是别人的vs 项目的…

AI 驱动的 SIEM 对增强安全性的 9 大好处

作者&#xff1a;来自 Elastic Joe DeFever 与传统的 SIEM 解决方案相比&#xff0c;人工智能驱动的安全信息和事件管理 (security information and event management - ) 解决方案使从业人员能够更高效、更有效地工作&#xff0c;而传统的 SIEM 解决方案依赖于手动流程来配置数…

基于Python的影院电影购票系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

深度学习经典模型之ZFNet

1 ZFNet 1.1 模型介绍 ​ ZFNet是由 M a t t h e w Matthew Matthew D . Z e i l e r D. Zeiler D.Zeiler和 R o b Rob Rob F e r g u s Fergus Fergus在AlexNet基础上提出的大型卷积网络&#xff0c;在2013年ILSVRC图像分类竞赛中以11.19%的错误率获得冠军&#xff08;实际…

ES8388 —— 带耳机放大器的低功耗立体声音频编解码器(4)

接前一篇文章&#xff1a;ES8388 —— 带耳机放大器的低功耗立体声音频编解码器&#xff08;3&#xff09; 二、详细描述 5. 微控制器配置接口 该设备支持标准SPI和2线&#xff08;I2C&#xff09;微控制器配置接口。外部微控制器可以通过写入内部配置寄存器来完全配置设备。…

Python实例:爱心代码

前言 在编程的奇妙世界里,代码不仅仅是冰冷的指令集合,它还可以成为表达情感、传递温暖的独特方式。今天,我们将一同探索用 Python 语言绘制爱心的神奇之旅。 爱心,这个象征着爱与温暖的符号,一直以来都在人类的情感世界中占据着特殊的地位。而通过 Python 的强大功能,…

部署stable-diffusion3.5 大模型,文生图

UI 使用推荐的ComfyUI&#xff0c;GitHub 地址&#xff0c;huggingface 需要注册登录&#xff0c;需要下载的文件下面有说明 Dockerfile 文件如下&#xff1a; FROM nvidia/cuda:12.4.0-base-ubuntu22.04 RUN apt-get update && apt-get install python3 pip git --n…

glibc 内存分配与释放机制详解

作者&#xff1a;来自 vivo 互联网存储团队- Wang Yuzhi 本文以一次线上故障为基础介绍了使用 glibc 进行内存管理可能碰到问题&#xff0c;进而对库中内存分配与释放机制进行分析&#xff0c;最后提供了相应问题的解决方案。 一、引言 内存对象的分配与释放一直是后端开发人…

SpringBoot框架在城镇住房保障中的应用

3系统分析 3.1可行性分析 通过对本城镇保障性住房管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本城镇保障性住房管理系统采用SSM框架&#xff0c;JA…

Openlayers高级交互(20/20):超级数据聚合,页面不再混乱

本示例在vue+openlayers中使用cluster生成聚合数据的效果。在OpenLayers中实现点聚合(clustering)是一个常见的需求,特别是在处理大量地理数据点时。聚合可以提高地图的性能并减少视觉上的混乱。 一、示例效果图 专栏名称内容介绍Openlayers基础实战 (72篇)专栏提供73篇文…