Files

1.9 KiB
Raw Permalink Blame History

Why

Пользователь не видит, что за картинка приложена к новости в карточке кандидата: в шаблоне candidates.html для постов с media_path показывается только бейдж «🖼 медиа», а само изображение не отображается. В web/app.py нет роута, который отдаёт медиа-файл (есть только /static для bootstrap), поэтому <img> некуда указывать. Аналогично в published.html медиа не показывается.

What Changes

  • Добавить в web/app.py роут GET /media/{filename} (с авторизацией, как у других роутов), который отдаёт файл из /opt/vesti/media/ или /opt/vesti/media/media/ (исторический баг путей: у старых постов media_path = media/media/<file>). Безопасно: только basename (защита от path traversal), отдаём FileResponse.
  • В candidates.html и published.html для постов с media_path выводить <img src="/media/{{ basename(media_path) }}" class="img-fluid ..."> (направление на роут; если файла нет — не показывать/плейсхолдер).
  • Медиа в карточке: фото/видео. Для изображений — <img>, для видео — <video controls>.

Why Not

  • Отдавать медиа через /static нельзя: файлы вне static/ и большие; роут нужен именно для media/.

Open Questions

  • Путь media_path в БД: media/<file> или media/media/<file> — резолвить через basename (имя файла уникально в каталоге).