относительные пути URL-адресов при обслуживании статических файлов с помощью FastAPI / Starlette

У меня есть простое приложение FastAPI, которое обслуживает файл test.html в app/main.py вот так:

@app.get('/')
def index():
  return FileResponse('static/test.html')

Структура каталогов такая:

app/main.py
app/static/test.html

Могу ли я изменить это, чтобы он работал с измененной структурой каталогов, где app/ и static/ являются братьями и сестрами?

Я пробовал return FileResponse('../static/test.html'), но пока это не помогло; в результате появляется ошибка «RuntimeError: файл по пути ../static/test.html не существует».


person rookie099    schedule 18.01.2020    source источник


Ответы (1)


Если ваш статический каталог находится в том же каталоге, что и ваш main.py
Попробуйте:

return FileResponse('./static/test.txt')

Похоже, вы искали в папке выше.

вы могли бы os.path получить родительский каталог

import os 
parent_dir_path = os.path.dirname(os.path.realpath(__file__))

@app.get('/')
def index():
  return FileResponse(parent_dir_path + '/static/test.html')
person user368604    schedule 20.01.2020
comment
Да, это почти все; при вычислении parent_dir_path отсутствует os.pardir. - person rookie099; 21.01.2020
comment
Привет, это работает для меня, но файлы отображаются как загрузка имени с расширением. Как заставить файлы возвращаться с правильным именем? Спасибо. - person ScipioAfricanus; 17.03.2020
comment
точно правильный ответ. это помогло мне получить правильный путь, как отчет о FastAPI github здесь: github.com/tiangolo/fastapi / issues / 376 - person Zaffer; 22.06.2021