【发布时间】: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