Django如何将静态文件加载路径修改为AWS S3存储桶路径
解决方案
第一步:安装所需依赖
- 安装
django-storages(Django官方维护的第三方存储集成库)和boto3(AWS官方Python SDK):
pip install django-storages boto3
第二步:修改settings.py配置
- 把
storages加入INSTALLED_APPS列表:
INSTALLED_APPS = [ # 保留你原有配置的其他应用项 'storages', ]
- 新增AWS S3相关配置,替换原有静态文件配置即可:
# AWS认证信息,强烈建议通过环境变量读取,不要硬编码在代码中 AWS_ACCESS_KEY_ID = "你的AWS访问密钥ID" AWS_SECRET_ACCESS_KEY = "你的AWS秘密访问密钥" # S3桶配置,和你实际的桶信息对应 AWS_STORAGE_BUCKET_NAME = "plantarte-assets" AWS_S3_REGION_NAME = "us-east-2" AWS_S3_FILE_OVERWRITE = False # 同名文件默认不覆盖,可按需调整 AWS_DEFAULT_ACL = "public-read" # 静态文件配置为公开可读,需要和你的S3桶权限匹配 # 配置静态文件使用S3存储 STATICFILES_STORAGE = "storages.backends.s3boto3.S3StaticStorage" STATIC_URL = f"https://{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com/" # 可选:如果本地开发时仍想使用本地静态文件,可以加判断区分环境 # DEBUG = True的情况下用本地配置,生产环境用S3 # if DEBUG: # STATIC_URL = '/static/' # STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # STATICFILES_DIRS = (os.path.join(BASE_DIR, 'website/static'),)
第三步:验证效果
你模板中原有的{% static %}标签不需要做任何修改,现在渲染出来的路径就会自动变成你期望的https://plantarte-assets.s3.us-east-2.amazonaws.com/website/images/home-slider/plantarte-espacio-4.jpg格式。
如果你还没有把静态文件上传到S3,可以执行python manage.py collectstatic命令,Django会自动把所有静态资源上传到你配置的S3桶对应路径下。
内容的提问来源于stack exchange,提问作者pauzca
相关产品推荐
相关产品推荐

