You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过FastAPI将list-of-dict自定义对象传递给Jinja2模板?

解决FastAPI传递List[Dict]到Jinja2模板的问题

问题原因

你当前的Jinja2模板代码是针对单个字典对象编写的(比如直接调用{{ 对象.items() }}或直接取字典键值),当传入整个列表时,模板试图对列表调用items()方法,但列表本身没有这个属性,因此触发UndefinedError。

解决方案

1. 调整FastAPI路由代码

确保传递完整的爬取列表,示例代码如下:

from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
import data_t3

app = FastAPI()
templates = Jinja2Templates(directory="templates")

@app.get("/scrape")
async def read_scrape(request: Request):
    # 获取完整爬取数据列表并传入模板
    scraped_data = data_t3.scraper_t3()
    return templates.TemplateResponse("scrape.html", {"request": request, "data_list": scraped_data})

2. 修改Jinja2模板代码

使用Jinja2的for循环遍历列表,逐个处理每个字典元素。
如果旧模板是针对单个字典编写的:

<!-- 旧模板(适配单个字典) -->
<div>
  {% for key, value in data.items() %}
    <p>{{ key }}: {{ value }}</p>
  {% endfor %}
</div>

则修改为适配列表的版本:

<!-- 新模板(遍历列表) -->
<div>
  {% for item in data_list %}
    <div class="data-item">
      {% for key, value in item.items() %}
        <p>{{ key }}: {{ value }}</p>
      {% endfor %}
      <hr>
    </div>
  {% endfor %}
</div>

3. 额外优化提示

  • 若爬取数据量较大,可加入分页逻辑或异步渲染,避免页面加载卡顿
  • 模板中可添加空列表判断,提升体验:
{% if not data_list %}
  <p>暂无爬取数据</p>
{% endif %}

内容的提问来源于stack exchange,提问作者gimmedata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:27:27