如何解决FASTAPI:无法呈现html页面
我正在尝试渲染html页面,该页面显示从网络摄像头捕获的视频。但面临错误:-500 Server Error TypeError: TemplateResponse() missing 1 required positional argument: 'context'
。我在Flask中尝试过的相同代码,在那儿工作正常。
from fastapi import FastAPI
import uvicorn
from fastapi import Depends,FastAPI
from fastapi import FastAPI,Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
import cv2
app = FastAPI(debug=True)
templates = Jinja2Templates(directory="templates")
@app.get("/")
async def index():
return templates.TemplateResponse("index.html")
async def gen_frames(camera_id):
cap= cv2.VideoCapture(0)
while True:
# for cap in caps:
# # Capture frame-by-frame
success,frame = cap.read() # read the camera frame
if not success:
break
else:
ret,buffer = cv2.imencode('.jpg',frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
if __name__ == '__main__':
uvicorn.run(app,host="127.0.0.1",port=8000)
我的HTML页面是:-index.html
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<title>Multiple Live Streaming</title>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-7">
<h3 class="mt-5">Multiple Live Streaming</h3>
<img src="{{ url_for('video_feed',id='0') }}" width="100%">
</div>
</div>
</div>
</body>
</html>
任何人都可以帮忙。我在这做错了什么? 相同的代码在Flask中运行
解决方法
使用模板时,您需要传递一个请求。
from fastapi import Request
@app.get("/")
async def index(request: Request):
return templates.TemplateResponse("index.html",{"request": request})
因此,您还可以使用StreamingResponse
将视频作为其他路径投放from fastapi.responses import StreamingResponse
@app.get("/serve/{camera_id}",include_in_schema=False)
async def serve_video(camera_id: int):
return StreamingResponse(gen_frames(camera_id))
然后使用Ajax或Axios等获取该响应。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。