Это известная проблема, и я просмотрел множество таких постов и применил разные возможности. Но ни проблема мне не ясна, ни какое-либо решение не сработало. Позвольте мне дать вам наилучшее описание проблемы.
У меня есть приложение Django. Структура папок выглядит следующим образом:
C:.
├───myproject
│ └───__pycache__
└───main
├───migrations
│ └───__pycache__
├───static
│ ├───css
│ └───js
├───templates
│ ├───main
│ └───registration
└───__pycache
Как видите, файлы css и jss находятся внутри папки с именем static
В HTML-кодах я получаю доступ к состоянию c файлов следующим образом:
{% load static %}
<link href="{% static "/css/bootstrap.min.css" %}" rel="stylesheet">
<link href="{% static "/css/mystyle.css" %}" rel="stylesheet">
Когда я запускаю встроенный сервер Django локально, к файлам осуществляется доступ, например,
http://127.0.0.1:8000/static/css/mystyle.css
в браузере, и он работает безупречно .
Теперь перейдем к части развертывания Heroku.
Я прошел официальную страницу, https://devcenter.heroku.com/articles/django-assets
Я изменил свои настройки. py файл как,
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
STATIC_URL = '/static/'
MIDDLEWARE_CLASSES = (
'whitenoise.middleware.WhiteNoiseMiddleware',
)
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
django_heroku.settings(locals())
Теперь, после выполнения сборок, я увидел в журнале сборки (облако Heroku) следующую строку,
python manage.py collectstatic --noinput
Итак, он собирает все данные c файлы и создает папку с именем staticfiles
и хранит их там. Структура,
C:.
├───myproject
│ └───__pycache__
├───main
│ ├───migrations
│ │ └───__pycache__
│ ├───static
│ │ ├───css
│ │ └───js
│ ├───templates
│ │ ├───main
│ │ └───registration
│ └───__pycache__
└───staticfiles
├───admin
│ ├───css
│ │ └───vendor
│ │ └───select2
│ ├───fonts
│ ├───img
│ │ └───gis
│ └───js
│ ├───admin
│ └───vendor
│ ├───jquery
│ ├───select2
│ │ └───i18n
│ └───xregexp
├───css
└───js
Теперь проблема начинается. Я проверяю в оболочке Heroku, что файлы stati c находятся внутри нужной папки staticfiles
. Но когда я открываю URL-адреса приложений, файлы stati c не загружаются.
Браузер выдает ошибку:
Refused to apply style from 'https://myproject1111.herokuapp.com/static/admin/css/base.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.
Теперь небольшое сравнение с локальным развертыванием против Heroku. В локальном сценарии к файлам CSS обращаются как http://127.0.0.1:8000/static/css/mystyle.css
. Я понимаю, что нет файловой структуры с именем, https://myproject1111.herokuapp.com/static/admin/css/base.css
. Но должно быть как https://myproject1111.herokuapp.com/staticfiles/admin/css/base.css
. Но это выдает Django Страница не найдена.
Может кто-нибудь пролить свет на это? Какие изменения (если необходимо) следует внести в HTML?