Flask не применяет стили, хотя файл доступен

Автор: | 11 сентября, 2024

Доброго дня. Столкнулся вот с чем.

В шаблоне index.html подключил стили с помощью конструкции

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

Но несмотря на то, что файл стилей лежал в нужной папочке по адресу /static/style.css — ничего не происходило.

Я попробовал подключить стиль от бутстрапа с помощью вот такой ссылки

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

И оно сработало. А свои стили — нет.

Случайно в консоли файерфокса увидел следующее сообщение:

«Таблица стилей http://127.0.0.1:5000/static/main.css не была загружена, потому что её MIME-тип («application/x-css») не «text/css».

Оказывается, браузер почему-то неправильно распознаёт тип этого файла (на вкладке «сеть» это видно).

То есть MIME-тип CSS-файла распознается не как «text/css», а как «application/x-css», а это — недопустимый MIME-тип для CSS. Поэтому стили не применяются к HTML-странице.

Чтобы исправить это, я задал MIME-тип CSS-файла в коде приложения Flask. Возможно, есть более хорошее решение, но я 3 часа искал, как это исправить, поэтому работает — и хорошо.

Для этого сначала дополнительно импортировал объект Response. Моя итоговая строка выглядела вот так:

"from flask import Flask, render_template, Response".

И добавил вот такой маршрут (уберите подчёркивания, если будете использовать код — просто пробелы не ставятся) для файла main.css:

@app.route("/static/main.css")
def css():
____css_file = open("static/main.css").read()
____resp = Response(css_file, mimetype="text/css")
____return resp

После этого всё заработало.

Спасибо за внимание, надеюсь, вам это помогло!

С уважением, Александр Крылов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *