如何将模板位置传递给 FastAPI 中的所有视图

How to pass templates location to all views in FastAPI

我有一个 FastAPI 网络应用程序,我想在其中使用模板语言。 现在,为了使用 jinja2,我必须通过像这样设置模板变量来指示模板文件夹的位置:

templates = Jinja2Templates(directory="templates")

我还有几个用于不同页面和用途的视图文件,例如 home.pyabout.pydb.py

如果我在 main.py 中设置一次模板变量,然后像这样将其导入视图文件:

from main import templates

我收到各种循环导入错误。所以我必须在每个视图文件中分别设置一个模板变量,这不是最优的。

如何在 main.py 中设置一次模板位置,然后让所有视图文件都知道该位置?

有很多方法可以解决这个问题 - 将模板配置移动到一个单独的文件中,而不是将其放在主文件中(templating.py 或在视图目录中的 __init__.py 中定义它)以便您可以改为从该模块导入它。在这种情况下,普通导入就可以了。

您还可以使用 FastAPI 中的依赖项注入功能在视图函数中注入模板上下文。

在单独的文件中将其设置为 Depends 构造(dependencies.pyapp_services.py__init__.py 或任何地方):

def get_templates():
    return Jinja2Templates(directory=...)

然后在您看来:

from dependencies import get_templates

...

@router.get('...')
async def display_xyz(templates: Jinja2Templates = Depends(get_templates))