感谢您抽出宝贵的时间阅读本文。我的问题很简单。
我能够设置collectstatic函数以将静态文件上传到AWS S3,但是有点麻烦。我一直在进行一些更改,现在,我的网站未使用正确的URL来加载CSS文件。因此,我的初始代码将静态文件移到了S3存储桶中,文件夹为“ static”并在此url上引用了它:
https://{project}.s3.amazonaws.com/static/css/bootstrap.min.css
现在,在进行一些更改后,我将其引用了相同的地址,但没有'static'文件夹:
https://{project}.amazonaws.com/css/bootstrap.min.css
相同的事情发生在静态函数上。与其将所有静态内容都加载到“ static”文件夹中,不如将所有内容都加载到存储桶的根目录中。
这是我的设置文件:
settings.py
AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static/'), ]
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATIC_URL = "https://%s/static/" % (AWS_S3_CUSTOM_DOMAIN)
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
MEDIA_URL = 'https://%s/media/' % (AWS_S3_CUSTOM_DOMAIN)
感谢您提前提供的所有帮助!我非常感谢社区和支持。
最好, 拉苏尔·基列耶夫(Rasul Kireev)
答案 0 :(得分:1)
如果要将文件存储在存储桶中的静态目录中,则需要覆盖Storage类。
可以说您有一个实用程序模块,并且在其中有一个storages.py
文件。然后实现应该是这样的:
# utilities/storages.py
from storages.backends.s3boto3 import S3Boto3Storage
class StaticRootS3Boto3Storage(S3Boto3Storage):
location = 'static'
然后在设置中使用它:
STATICFILES_STORAGE = 'utilities.storages.StaticRootS3Boto3Storage'
答案 1 :(得分:1)
# constants
STATICFILES_LOCATION = 'static'
STATICFILES_STORAGE = 'custom_storages.StaticStorage'
覆盖s3boto3storage类变量的位置。
# custom_storages.py
from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage
class StaticStorage(S3Boto3Storage):
location = settings.STATICFILES_LOCATION
您可以按照此article进行参考。