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. Сайт не вызывает никаких проблем, пока он находится в режиме разработки.
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
)