Возможность использования вложенной статической папки в колбе

По умолчанию флажок разрешает один уровень вложенности в статической папке. Например,

->static <BR>
---->css <BR>
------->images<BR>

Мы можем обращаться к файлам в каталоге css через браузер.

например. http://localhost:5000/static/css/file1.css

Как мы можем получить доступ к файлам в каталоге изображений через браузер?

Ответ 1

Флажок устанавливает маршрут для статических файлов, используя ваш статический путь (по умолчанию - /static) и любой текст. Из источника :

self.add_url_rule(self.static_url_path + '/<path:filename>',
    endpoint='static',
    view_func=self.send_static_file)

send_to_static передает все, что этот маршрут назначает filename.

return send_from_directory(self.static_folder, filename,
    cache_timeout=cache_timeout)

Если вы посмотрите источник для send_from_directory, вы увидите, что он просто использует safe_join(directory, filename) для получения пути к файлу.

safe_join сам выполняет некоторую работу по нормализации пути и следит за такими вещами, как .. в имени файла.

Возвращаясь к URL-адресу, path соответствует любому тексту. Это похоже на string, за исключением того, что он принимает косые черты. Это означает, что вы можете использовать любой уровень вложенности в вашей статической папке. URL-адреса, такие как /static/file.txt и /static/p/a/t/h/t/o/file.txt, будут работать. Пока URL-адреса начинаются со статического пути, поведение, которое вы хотите, работает из коробки:

http://localhost:5000/static/css/images/image1.png

Ответ 2

Не уверен, где вы находите, Flask позволяет только один уровень вложенности.

Просто попробуйте.

У меня есть каталог ./static/html/jobs.html, и я получаю это в URL-адресе http://localhost:5000/static/html/jobs.html.