FastApi教程|范本

发表时间:2020-03-09

您可以将任何所需的模板引擎与 FastAPI 一起 使用

常见的选择是Jinja2,与Flask和其他工具使用的选举相同。

有一些实用程序可以轻松配置它,您可以直接在 FastAPI 应用程序(由Starlette提供)中使用它。

安装依赖

安装 jinja2

pip install jinja2

如果您还需要提供静态文件(如本例所示),请安装 aiofiles

pip install aiofiles

使用 Jinja2Templates

  • 导入 Jinja2Templates
  • 创建一个 templates 对象,以后可以重用。
  • Request 路径操作 中 声明一个 参数,该参数 将返回模板。
  • 使用 templates 您创建的渲染并返回 TemplateResponse ,并 request 在Jinja2“上下文” 中将 用作键值对之一。
from fastapi import FastAPI, Request
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}")
async def read_item(request: Request, id: str):
    return templates.TemplateResponse("item.html", {"request": request, "id": id})

注意

注意,必须 request 在Jinja2的上下文 中将 as作为键值对的一部分 传递 。 因此,您还必须在 path操作中 声明它 。

技术细节

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

FastAPI 提供相同 starlette.templating 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>Item ID: {{ id }}</h1>
</body>
</html>

它将显示 您通过 id 的“上下文”中的 dict 内容:

{"request": request, "id": id}

模板和静态文件

而且,您还可以 url_for() 在模板内部 使用 和使用它,例如,与 StaticFiles 您安装 的模板一起使用 。

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

在此示例中,它将通过以下链接链接到CSS文件 static/styles.css

h1 {
    color: green;
}

并且由于正在使用 StaticFiles ,因此CSS文件将由您的 FastAPI 应用程序在URL处 自动提供 /static/styles.css

更多细节

有关更多详细信息(包括如何测试模板),请查看 Starlette关于模板的文档

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free