Ссылка на статические файлы Flask с url_for


91

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

Когда я пытаюсь обслужить файл из 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-адресов статических файлов на любом уровне?

Ответы:


182

По умолчанию у вас есть staticконечная точка для статических файлов. Также у 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документацию .


Обратите внимание, что при инициализации Flaskдобавляется правило URL-адреса для staticконечной точки, поэтому изменение этих атрибутов в Flaskэкземпляре не влияет на url_for('static', ...)результат. Чтобы изменить пост-инициализацию статической конечной точки, см. Суть gist.github.com/brycepg/593ffb5ce9316d2871c7f24f9de34c24
Брайс Гуинта,

1

В моем случае у меня была специальная инструкция в файле конфигурации nginx:

location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
            try_files $uri =404;
    }

Все клиенты получили 404, потому что nginx ничего не знал о Flask.

Надеюсь, это кому-то поможет.


Первичный файл конфигурации - это /etc/nginx/nginx.conf (в Linux). Это может быть аналогичный путь в Windows (я действительно не знаю)
Эндрю Гроу

Это конфигурация на стороне сервера, если вы просто разрабатываете приложение на своем рабочем столе, вероятно, оно вам не понадобится.
adamczi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.