#python #html #flask
#python #flask #jinja2
Вопрос:
Как вы используете url_for
в Flask для ссылки на файл в папке? Например, у меня есть несколько статических файлов в 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-адресов статических файлов на любом уровне?
Ответ №1:
По умолчанию у вас есть static
конечная точка для статических файлов. Также Flask
приложение имеет следующие аргументы:
static_url_path
: может использоваться для указания другого пути для статических файлов в Интернете. По умолчанию используется имя static_folder
папки.
static_folder
: папка со статическими файлами, которые должны обслуживаться в static_url_path
. По умолчанию используется папка ‘static’ в корневом каталоге приложения.
Это означает, что 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
документацию.
Ответ №2:
В моем случае у меня была специальная инструкция в файле конфигурации 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.