Приложение Django в Azure не получает статические файлы

Получил свой проект Django в веб-приложении Azure, но когда я вызываю терминал SSH:

Python manage.py collectstatic

Он говорит, что скопировано 252 файла, но мои статические файлы не видны в моих шаблонах, а статическая папка в wwwroot пуста ... Вот моя структура wwwroot:

wwwroot
|---Myproject
|---manage.py
|---oryx-manifest.toml
|---hostingstart.html
|---static //With all my static files
├── myapp
│   ├── migrations
│   ├── __pycache__
│   ├── static
|   |   |---Images
|   |   |   |--myimage.png
|   |   |   |--myimage2.png
│   └── templates

А это мои настройки.py:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
   ('myapp', os.path.join(BASE_DIR, 'myapp', 'static')),
)
STATICFILES_FINDERS = (
  'django.contrib.staticfiles.finders.FileSystemFinder',
  'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

Любая идея, почему или что я делаю неправильно? Azure собирает разные?

РЕДАКТИРОВАТЬ> Когда я захожу на свой сайт, мои изображения не отображаются... Я называю их так по шаблону:

{% load static %}
<img src = "{% static 'Images/myimage.png' %}" /><br>

РЕДАКТИРОВАТЬ 2 /////

В wwwroot действительно создается папка со всей моей статикой, но когда я загружаю свой шаблон, они не отображаются, в консоли wen я получаю эту ошибку для myimage.png и myimage2.png:

Failed to load resource: the server responded with a status of 404 (Not Found)

Вы не можете найти папку с именем staticfiles на корневом уровне (тот же каталог, что и myapp/)? Не уверен насчет этой строки «мои статические файлы не видны в моих шаблонах». Не могли бы вы опубликовать структуру папок в wwwroot?

Doris Lv 24.12.2020 07:53

@DorisLv Спасибо за ответ, конечно, я обновил свой вопрос, добавив структуру папок wwwroot, теперь он говорит, что скопировано 252 файла, но статическая папка все еще пуста, и мои изображения не отображаются на моем веб-сайте.

jsanchezs 24.12.2020 15:22

@jsanchezs Как вы развертываете свое приложение в Azure?

Bhargavi Annadevara 18.01.2021 18:49

@BhargaviAnnadevara Я использовал центр развертывания на портале Azure.

jsanchezs 18.01.2021 19:25

@jsanchezs Вы пытались скопировать их вручную и проверить? Или с другим методом развертывания?

Bhargavi Annadevara 18.01.2021 19:52

@jsanchezs Любое обновление с вышеперечисленным?

Bhargavi Annadevara 20.01.2021 08:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
6
5 415
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я бы порекомендовал проверить Whitenoise для обслуживания ваших статических файлов с помощью Django. У меня не было проблем с их обслуживанием с момента интеграции Whitenoise. Попробуйте заменить его на текущую настройку поиска статических файлов.

http://whitenoise.evans.io/ru/stable/django.html

Несколько замечаний:

Нижняя строка изменится

STATIC_ROOT = (os.path.join(BASE_DIR, 'Myproject/static_files/'))

к

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

Здесь вы указываете на совершенно другую папку. Следовательно, всегда пусто. Вам нужна команда collectstatic для копирования файлов в Проект > статический каталог


Ниже удалите строку os.path.join(BASE_DIR, 'static/')...

STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static/'), #Not Required since you already mentioned it in STATIC_URL
('myapp', os.path.join(BASE_DIR, 'myapp', 'static')),
)

Причина:

  • STATIC_ROOT — это папка, в которой будут храниться статические файлы после с помощью manage.py

Абсолютный путь к каталогу, в котором будет собирать collectstatic статические файлы для развертывания.

Если приложение staticfiles contrib включено (по умолчанию), команда управления collectstatic соберет статические файлы в этот каталог. Дополнительные сведения см. в руководстве по управлению статическими файлами. об использовании.

  • STATICFILES_DIRS — это список папок, в которых Django будет искать дополнительные статические файлы помимо статической папки каждого приложения установлен.

Этот параметр определяет дополнительные местоположения, которые приложение staticfiles будет пройти, если включен искатель FileSystemFinder, например. если вы используете команда управления collectstatic или findstatic или используйте команду static просмотр файлового сервиса.

Если проблема не устранена, проверьте каталог статических файлов в конфигурационном файле apache mod_wsgi на сервере, если он настроен правильно.

Перейдите по этой ссылке, чтобы получить помощь по этому вопросу >> https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/modwsgi/


Ваше здоровье!!!

Спасибо за ваш добрый ответ. Сделал то, что вы мне сказали, но до сих пор не получаете статику, я имею в виду, что в wwwroot collectstatics действительно создает папку со всем, но когда я загружаю свою страницу, они не отображаются, а в веб-консоли отображается: Не удалось загрузить ресурс: сервер ответил со статусом 404 (не найдено)...

jsanchezs 20.01.2021 17:35

Не могли бы вы поделиться конфигурациями развертывания вашего приложения django в Azure? Как и где вы указали свою статическую папку в своей конфигурации?

Ayan Banerjee 27.01.2021 13:51

Большой. Удачи друг! :)

Ayan Banerjee 28.01.2021 08:46

@jsanchezs Это работает, только если вы включаете режим отладки, и перестает работать, как только вы отключаете отладку, которую нельзя использовать для производства. Заработало ли это, пока DEBUG = False?

Neil 03.08.2021 00:19
Ответ принят как подходящий

Нашел !!

Просто нужно было добавить это: + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) для таких шаблонов URL:

from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
        path('myapp/', include('myapp.urls')),
        path('admin/', admin.site.urls),
    ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

И это помогло, надеюсь, это поможет кому-то еще !!

Не забудьте импортировать настройки: from django.conf import settings

w5m 16.07.2021 12:19

Знаете ли вы, почему это не требуется локально, но требуется в Azure?

Psddp 06.12.2021 23:22

Django не обслуживает статические файлы в рабочем режиме.

Единственный раз, когда он обслуживает статические файлы, это когда вы включаете DEBUG = True, который находится в режиме разработки, и это не рекомендуется в производственных настройках.

Django рекомендует обслуживать статические файлы через CND или любой другой веб-сервер. Однако, если ваш веб-сайт минимален и не получает большого объема трафика, вы можете обслуживать свои статические файлы с помощью белого шума Django, и вот как вы это делаете.

Приведенное ниже решение работает на python 3.7 и Django 3.2.

Шаг 1: Установите пакет whitenoise

pip install whitenoise

Шаг 2. Убедитесь, что ваш каталог BASE_DIR выглядит так, как показано ниже.

BASE_DIR = Path(__file__).resolve().parent.parent

Шаг 3: Добавьте их в свой settings.py. Если вы получаете какие-либо ошибки, попробуйте закомментировать STATICFILES_STORAGE и проверить

STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Шаг 4: промежуточное ПО WhiteNoise должно быть размещено непосредственно после Django SecurityMiddleware (если вы его используете) и перед всеми остальными промежуточными программами.

MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',
  # ...
]

Шаг 5: Убедитесь, что именно так вы ссылаетесь на статические файлы в своих шаблонах (также проверьте, упоминается ли {% load static %} в вашем шаблоне

<link rel = "stylesheet" type = "text/css" href = "{% static 'appname/styles.css' %}">

Шаг 6: Запустите сбор статики

python manage.py collectstatic

Шаг 7: Установите DEBUG = False и запустите сервер, чтобы убедиться, что он работает.

Некоторые дополнительные ресурсы для дальнейшего чтения:

белый нойз
Django на Azure — за пределами «привет, мир»

Другие вопросы по теме