Jinja2模板遍历API嵌套字典:循环不渲染问题排查
问题分析与解决
核心问题
模板循环未渲染的根源是模板变量传递错误,同时存在Request参数传递的低级错误,具体如下:
- 员工列表传递错误:
employees是列表类型查询结果,但你试图通过employees.employee获取数据——列表不存在employee属性,直接传employees即可。 - 公司名称取值错误:如果
company是数据库返回的结果列表(即使只有一条数据),company.company无法正确取值,需要取列表第一个元素的company字段。 - Request对象传递错误:TemplateResponse需要传入函数参数里的实际
request对象,而非Request类本身。
修正后的代码
@get("/{company_id}", response_class=PlainTextResponse) async def generate_template(company_id: int, request: Request): company = <用于筛选Cat Inc. company_id的函数> employees = <用于查找company_id匹配Cat Inc.的员工的函数> return templates.TemplateResponse( "company.j2", { "request": request, # 传入实际请求对象 "company": company[0].company, # 从列表中取第一个公司对象的名称 "employees": employees # 直接传入员工列表 } )
额外验证点
- 确认
employees查询返回的是包含员工字典的列表(和你给出的API响应格式一致),确保Jinja2的for循环能正常遍历。 - 如果
company查询返回的是单个对象而非列表,直接用company.company即可,无需索引取值。
内容的提问来源于stack exchange,提问作者Wonseok Choi
相关产品推荐
相关产品推荐

