当前位置: 首页 > news >正文

三周精通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 Jinja2Templatesapp = 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 Jinja2Templatesapp = 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>


http://www.mrgr.cn/news/67597.html

相关文章:

  • postman入参file的接口测试
  • 【大数据技术基础 | 实验七】HBase实验:部署HBase
  • 纯前端生成PDF(jsPDF)并下载保存或上传到OSS
  • 2024Reddit入门:Reddit养号技巧,一篇包含所有知识点!
  • linux下linuxdeployqt打包过程
  • AI + 绘画 | 100个可变现的渠道、方式
  • scala list系列
  • Sigrity Power SI 3D-EM Capacitance Extraction模式如何进行电容的提取操作指导
  • 打印等边三角形和直角三角形(用循环)C语言
  • 红黑树详解
  • 史上最大应用层DDoS攻击 H2 Rapid Reset攻击研究
  • 什么是大模型?一文读懂大模型的基本概念
  • 基于Zynq FPGA对雷龙SD NAND的测试
  • MySQL数据库面试题(上)
  • 后端Node学习项目-项目基础搭建
  • pip包离线下载地址
  • swiper分页器自定义
  • wxwidgets开发最佳IDE之codeLite配置,比CodeBlocks好用10倍,还支持Qt和VS,web开发
  • map容器的设计理念
  • Verilog基础知识-数字进制格式
  • Facebook vs. Google:哪个更适合你的品牌
  • 第十一天 线性代数基础
  • GPU的内存是什么?
  • 【SpringCloud】Kafka消息中间件
  • AI大模型如何重塑软件开发流程?
  • ubuntu 22.04 防火墙 ufw