fastapi: не выводится изображение в html-шаблоне

Пробую вывести картинку в html-шаблоне сайта, но скрипт не находит ее. В чём может быть проблема?

Код:

from fastapi import FastAPI, Request, HTTPException
from uvicorn import run
from fastapi.staticfiles import StaticFiles
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates

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

@app.get("/", response_class=HTMLResponse)
async def root(request: Request):
    try:
        return templates.TemplateResponse("main.html", {"request": request})
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

if __name__ == "__main__":
    run("main:app", host="localhost", port=8000, reload=True)

template:

<!DOCTYPE html>
<html>
<head>
    <title>Поле ввода с начальным текстом</title>
    <img src='logo.png'>
</head>
</html>

картинка в той же папке, что и html-файл (в папке templates)


Ответы (2 шт):

Автор решения: TFader

проблема была в том, что я не прописал статичный путь в основном файле. выглядит это вот так:

app.mount("/static", StaticFiles(directory="static"), name="static")

далее кидаете картинку в папку static и указываете в вашем html файле путь

static/...
→ Ссылка
Автор решения: Дмитрий Губин

Я нашел решение для варианта, когда изображения хочется хранить не в templates и не в static. Я как не пробовал добавить изображение, не хотел грузить неоткуда, кроме "static", а назначить свою папку как StaticFiles у меня не вышло. Я решил, сделав свой эндпоинт для загрузки:

@router.get("/get-media/{path:path}")
async def get_media(path: str):
full_path = MEDIA_DIR / path
if full_path.exists():
    return FileResponse(full_path)
return Response(status_code=404)

и затем я получаю изображение как:

<img src="{{ url_for('get_media', path='Testuser/DevM_B_tstimg_noise.jpg') }}">

или:

mapImg.src = `/get-media/${mapObj.result}`;
→ Ссылка