2013-05-03 2 views
51

Как вы используете url_for в Flask для ссылки на файл в папке? Например, у меня есть некоторые статические файлы в папке static, некоторые из которых могут быть в подпапках, таких как static/bootstrap.Ссылка на Flask static files with url_for

Когда я пытаюсь подать файл от static/bootstrap, я получаю сообщение об ошибке.

<link rel=stylesheet type=text/css href="{{ url_for('static/bootstrap', filename='bootstrap.min.css') }}"> 

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

<link rel=stylesheet type=text/css href="{{ url_for('static', filename='bootstrap.min.css') }}"> 

Что такое правильный способ ссылаться на статические файлы с url_for? Как использовать url_for для генерации URL-адресов для статических файлов на любом уровне?

ответ

105

У вас есть по умолчанию static endpoint для статических файлов. Также приложение Flask имеет следующие аргументы:

static_url_path: может использоваться для указания другого пути для статических файлов в Интернете. По умолчанию указывается имя папки static_folder.

static_folder: папка со статическими файлами, которая должна быть отправлена ​​по адресу static_url_path. По умолчанию устанавливается «статическая» папка в корневом пути приложения.

Это означает, что filename аргумент будет принимать относительный путь к файлу в static_folder и преобразовать его в относительный путь в сочетании с static_url_default:

url_for('static', filename='path/to/file') 

преобразует путь к файлу из static_folder/path/to/file на пути URL-адреса static_url_default/path/to/file ,

Так что если вы хотите получить файлы из папки static/bootstrap использовать этот код:

<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='bootstrap/bootstrap.min.css') }}"> 

которые будут преобразованы в (с использованием настроек по умолчанию):

<link rel="stylesheet" type="text/css" href="static/bootstrap/bootstrap.min.css"> 

Также смотрите на url_for documentation.

Смежные вопросы