Я хочу отразить изображения с трясогузкой
Текущее состояние
* Когда я загрузил файлы изображений на wagtail, хотя заголовок изображения читается хорошо, но само изображение было уничтожено. поэтому заголовки отображаются только на экране как администратора, так и пользователя. Я просмотрел несколько блогов и сайтов о медиа и статике, но эта проблема не была решена в течение многих дней. Кроме того, после использования s3, CSS на стороне администратора может отражаться или не отражаться в зависимости от браузера.
среда разработки
python==3.7.3
Django==3.2.6
gunicorn==20.1.0
psycopg2==2.9.1
wagtail==2.14
whitenoise==5.3.0
DB == postgres
server == Heroku stack-18
aws s3
====
CSS был сохранен whitenoise до адаптации s3, но я не знаю, нужно ли добавлять два STATICFILES_STORAGE, поэтому удалил один. Я не смог использовать команду collectstatic, хотя
бессмысленный код
прокомментируйте предыдущий код
#base.py
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_DIR = os.path.dirname(PROJECT_DIR)
# aws settings
"""
AWS_ACCESS_KEY_ID = 'AKIAXXXXXXXXXXXXXXX'
AWS_SECRET_ACCESS_KEY = 'XXXXXXXXXXXXXXXXXXXX'
AWS_STORAGE_BUCKET_NAME = 'XXXXXXXXXXXXXXX'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_DEFAULT_ACL = None
"""
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
AWS_S3_CUSTOM_DOMAIN = f'XXXXXXXXXXXXX.com.s3.amazonaws.com'
AWS_URL = os.environ.get('AWS_URL')
AWS_DEFAULT_ACL = 'public-read'
# static settings
"""
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_LOCATIONS = 'static'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
"""
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = 'https://{ AWS_S3_CUSTOM_DOMAIN }/static/'
STATICFILES_LOCATIONS = 'static'
STATICFILES_STORAGE = 'squjap.settings.backends.StaticStorage'
# media settings
"""
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
"""
MEDIA_URL = 'https://{ AWS_S3_CUSTOM_DOMAIN }/media/'
MEDIAFILES_LOCATIONS = 'media'
DEFAULT_FILE_STORAGE = 'squjap.settings.backends.MediaStorage'
AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
#production.py
from __future__ import absolute_import, unicode_literals
import dj_database_url
import os
from .base import *
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
"""
COMPRESS_OFFLINE = True
COMPRESS_CSS_FILTERS = ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.CSSMinFilter',]
COMPRESS_CSS_HASHING_METHOD = 'content'
"""
ALLOWED_HOSTS = ['*']
#backends.py
from storages.backends.s3boto3 import S3Boto3Storage
from django.conf import settings
"""
class MediaStorage(S3Boto3Storage):
location = 'media'
file_overwrite = False
"""
class StaticStorage(S3Boto3Storage):
location = settings.STATICFILES_LOCATIONS
file_overwrite = False
class MediaStorage(S3Boto3Storage):
location = settings.MEDIAFILES_LOCATIONS