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

#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.