Использован :path в FastAPI-роутах, имя+версия парсятся из URL. Шаблоны urlencode-ят имена пакетов при генерации ссылок.
Фильтр-бар вынесен из _scans_table.html / _packages_table.html в scans_list.html / packages_list.html — вне htmx target. htmx заменяет только таблицу, фильтр остаётся на месте.
Проблема: htmx через hx-target="#scans-table-container" получал полную HTML-страницу (с <html>, <nav>, <head>) и вставлял её внутрь существующей страницы → дублировался header. Решение: шаблоны разделены на полные + фрагменты: - _scans_table.html — только filter-bar + таблица + пагинация - _packages_table.html — аналогично - web/routes.py: проверка HX-Request хедера → отдаём фрагмент