【问题标题】:FastAPI Jinja2Templates - Error while running initialising templates?FastAPI Jinja2Templates - 运行初始化模板时出错?
【发布时间】:2022-07-05 00:58:05
【问题描述】:

我正在开发一个简单的 FastAPI 项目,我想使用 Jinja2Templates 进行 html 响应,但出现以下错误:

from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from pydantic import BaseModel
from sqlalchemy.orm import Session
from db import SessionLocal, engine
from fastapi.templating import Jinja2Templates

import models

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

models.Base.metadata.create_all(bind=engine)

@app.get("/", response_class=HTMLResponse)
async def home(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

我明白了:

File "C:\Users\11111\Documents\Stranky\psani web FastAPI 2\psani web FastAPI 2\.\main.py", line 11, in <module>
    templates = Jinja2Templates(directory="templates")
  File "C:\Users\11111\AppData\Local\Programs\Python\Python310\lib\site-packages\starlette\templating.py", line 53, in __init__
    self.env = self.get_env(directory)
  File "C:\Users\11111\AppData\Local\Programs\Python\Python310\lib\site-packages\starlette\templating.py", line 56, in get_env
    @jinja2.contextfunction
AttributeError: module 'jinja2' has no attribute 'contextfunction'

我该怎么办?

pip 冻结输出:

anyio==3.6.1
fastapi==0.78.0
greenlet==1.1.2
idna==3.3
Jinja2==3.1.2
MarkupSafe==2.1.1
pydantic==1.9.1
sniffio==1.2.0
SQLAlchemy==1.4.36
starlette==0.19.1
typing_extensions==4.2.0

【问题讨论】:

  • 我认为您使用的是jinja2==3.1.0,而您的starlette 版本与它不兼容。查看发行说明:github.com/pallets/jinja/blob/….
  • 对不起,我该如何解决?
  • 你应该更新 starletter(可能还有 fastapi):pip install -U starlette
  • 我有 Jinja2==3.1.2,starlette==0.19.1,fastapi==0.78.0。它告诉我它卸载了较新的 starlette 版本,因为它与 fastapi 不兼容,所以我认为它会起作用。它没有。
  • 您可能想降级到jinja2==3.0.3,因为它对我有用,但我不确定是否可以重现该问题。如果问题仍然存在,您能否将pip freeze 的输出添加到问题中?

标签: python sqlalchemy jinja2 fastapi pydantic


【解决方案1】:

您的 fastapi 版本需要特定版本的 starlette,您需要满足此要求。

如何解决?

运行命令:

pip install -r requirements.txt

现在在您的终端中,您将看到这种红色警告

fastapi 0.78.0 有要求 starlette==0.19.1,但你会有 不兼容的starlette 0.20.4。

现在在您的 requirements.txt 文件中更新所需的 starlette 版本并再次运行

pip install -r requirements.txt

希望这能解决您的问题。

注意: 转到https://fastapi.tiangolo.com/ 并找到最新版本的 fastapi,在您的 requirements.txt 中使用它,然后按照上述步骤操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2014-11-23
    相关资源
    最近更新 更多