Медиа-файлы Django не работают, когда debug = false - PullRequest
0 голосов
/ 25 апреля 2019

settings.py

STATIC_URL = '/static/'
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'staticfiles')]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

MEDIA_ROOT = os.path.join(BASE_DIR, 'data')
MEDIA_URL = '/data/'

urls.py

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

handler404 = 'generic.views.invalid_request'

Когда я установил DEBUG = False и запустилсервер, использующий python manage.py runserver --insecure, все статические файлы успешно обслуживаются, но медиа-файлы не отображаются.В отладочной консоли URL-адреса носителей вызывают ошибку 500.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Я использовал WhiteNoise , который позволяет вашему веб-приложению обслуживать собственные статические файлы, превращая его в автономный модуль, который можно развернуть где угодно, не полагаясь на nginx, Amazon S3 или любой другой внешний сервис.

1 - Установить с помощью пипса:

pip install whitenoise

2 - отредактируйте файл settings.py и добавьте WhiteNoise в список MIDDLEWARE_CLASSES, помимо всего прочего промежуточного программного обеспечения, кроме SecurityMiddleware Django:

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

Это все, что вам нужно для обслуживания статических файлов без настройки какого-либо стороннего сервера.

0 голосов
/ 25 апреля 2019

static вспомогательная функция не работает в режиме DEBUG = False.И не должен.Обслуживание статических / медиа файлов с Django в prod не рекомендуется .Настройте свой веб-сервер ( Nginx , Apache , ..) для обслуживания этих файлов.

error 500 - изучите файлы журналов, чтобы понять, что вызывает сбой приложения.static file are serve successfully возможно, они взяты из кеша браузера.

...