Django - Not Found Запрашиваемый ресурс не найден на этом сервере на Production

Я пытался развернуть свой проект Django на Render . Все работает нормально, кроме медиафайлов. Я не могу понять, в чем здесь проблема.

Я добавил следующее в мой settings.py:

DEBUG=False
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'accounts',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    "django.middleware.security.SecurityMiddleware",
    "whitenoise.middleware.WhiteNoiseMiddleware",
]

STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / "staticfiles"
STATICFILES_DIRS = [
    BASE_DIR / "static"
]

MEDIA_URL = '/contents/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/contents/')
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
STATICFILES_STORAGE = "whitenoise.storage.CompressedStaticFilesStorage"

urls.py

from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
        urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

Перед развертыванием я создал пост (используя модели). В нем было изображение, расположенное по адресу ./static/contents/Screenshot_334.png После развертывания это изображение доступно по адресу https://someusername.onrender.com/static/contents/Screenshot_334.png. Но если я создаю новый пост на развернутом сайте, я получаю ошибку 404. Сайт не вызывает никаких проблем, пока он находится в режиме разработки.

Вот часть LOGS из Render: enter image description here

https://someusername.onrender.com/static/contents/Screenshot_334.png (созданный во время разработки) доступен, но https://someusername.onrender.com/static/contents/Screenshot_1.png (созданный пост-продакшн) недоступен. Также, статические файлы (css, js) работают нормально.

Я также пробовал менять MEDIA_URL и MEDIA_ROOT на 'contents', 'contents/', 'static/contents/' и все возможные вариации.

Добавьте whitenoise в ваши установленные приложения

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'whitenoise',
'accounts',

]

затем добавьте whitenoise.middleware.WhiteNoiseMiddleware в вашу промежуточную программу сразу после первой строки.

<
STATIC_URL = 'static/'
STATIC_ROOT = BASE_DIR / "staticfiles"
STATICFILES_DIRS = [
    BASE_DIR / "static"
]

MEDIA_URL = 'contents/'
MEDIA_ROOT = BASE_DIR / 'static/contents'

отредактируйте свои urls.py

from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
    path(....)
]
urlpatterns += static(settings.STATIC_URL, 
   document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, 
   document_root=settings.MEDIA_ROOT
)
Вернуться на верх