Stati c Проблема с файлом с DJango и Heroku - PullRequest
0 голосов
/ 29 апреля 2020

Это известная проблема, и я просмотрел множество таких постов и применил разные возможности. Но ни проблема мне не ясна, ни какое-либо решение не сработало. Позвольте мне дать вам наилучшее описание проблемы.

У меня есть приложение 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...