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

FastAPI中向Jinja2Templates传递globals报错,如何正确配置全局变量?

FastAPI中Jinja2模板全局变量配置问题

问题场景

你尝试参考Starlette源码,通过给fastapi.templating.Jinja2Templates构造函数传递globals参数设置模板全局变量,编写代码如下:

from fastapi.templating import Jinja2Templates

templates = None
try:
    templates = Jinja2Templates(directory=f"{webroot}", globals={"myglobal":"somevalue"})
except Exception as e:
    logger.exception("No templates folder found, skipping...")

应用启动时触发异常,报错信息:

No templates folder found, skipping...
 Traceback (most recent call last):
   File "/app/main.py", line 22, in <module>
     templates = Jinja2Templates(directory=f"{webroot}", globals={"myglobal":"somevalue"})
   File "/app/venv/lib/python3.7/site-packages/starlette/templating.py", line 74, in __init__
     self.env = self._create_env(directory, **env_options)
   File "/app/venv/lib/python3.7/site-packages/starlette/templating.py", line 89, in _create_env
     env = jinja2.Environment(**env_options)
 TypeError: __init__() got an unexpected keyword argument 'globals'

问题原因

Jinja2Templates的构造函数不会直接将globals参数传递给jinja2.Environment,你对Starlette源码的参数传递方式存在误解。jinja2.Environment的全局变量并不是通过构造函数关键字参数传入,而是需要修改其内置的globals字典。

正确配置方式

创建Jinja2Templates实例后,直接修改它的env.globals字典即可添加全局变量:

from fastapi.templating import Jinja2Templates

templates = None
try:
    templates = Jinja2Templates(directory=f"{webroot}")
    # 直接向环境的globals字典添加全局变量
    templates.env.globals["myglobal"] = "somevalue"
except Exception as e:
    logger.exception("模板初始化失败,跳过配置...")

另外注意:你当前捕获异常时的日志提示"No templates folder found"并不匹配实际报错原因(参数错误而非目录不存在),建议调整日志内容以避免误导。

内容的提问来源于stack exchange,提问作者Mr. Developerdude

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:17:26