fastapi/docs/zh/docs/advanced/templates.md

3.1 KiB
Raw Blame History

模板

FastAPI 支持多种模板引擎。

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

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

安装依赖项

确保你创建一个虚拟环境{.internal-link target=_blank},激活它,并安装 jinja2

$ pip install jinja2

---> 100%

使用 Jinja2Templates

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

{* ../../docs_src/templates/tutorial001_py39.py hl[4,11,15:18] *}

/// note

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

///

/// tip

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

///

/// note | 技术细节

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

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

///

编写模板

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

{!../../docs_src/templates/templates/item.html!}

模板上下文值

在包含如下语句的html中:

{% raw %}

Item ID: {{ id }}

{% endraw %}

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

{"id": id}

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

Item ID: 42

模板 url_for 参数

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

所以,该部分:

{% raw %}

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

{% endraw %}

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

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

<a href="/items/42">

模板与静态文件

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

{!../../docs_src/templates/templates/item.html!}

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

{!../../docs_src/templates/static/styles.css!}

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

更多说明

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