Посилання на статичні файли Flask за допомогою url_for


91

Як ви використовуєте 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-адрес для статичних файлів на будь-якому рівні?

Відповіді:


182

За замовчуванням у вас є 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/fileurl-шляху 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
Bryce Guinta,

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.