Skip to main content
 首页 » 编程设计

python之使用 S3 子文件夹作为 Django collectstatic 目的地

2025年02月15日3752php

我正在 AWS(ElasticBeanstalk、S3、RDS)上启动 Django (1.11.x) 项目。使用 boto3 和 django-storages 应用程序,我设法将我的静态文件推送到 S3,直接放入存储桶中。但是 S3 存储桶还有一些与静态无关的其他文件和目录。出于这个原因,我想在 S3 存储桶中创建一个名为 static 的文件夹,并将所有静态文件推送到这个专门指定的目录中。

我的 settings.py 看起来像这样:

[...] 
# Static files (CSS, JavaScript, Images) 
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' 
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' 
 
AWS_ACCESS_KEY_ID = AWS_S3_MyKEY 
AWS_SECRET_ACCESS_KEY = AWS_S3_MySECRET 
AWS_STORAGE_BUCKET_NAME = 'elasticbeanstalk-us-west-2-1xxxxxxxxxxx1' 
AWS_S3_CUSTOM_DOMAIN = '%s.s3-us-west-2.amazonaws.com' % AWS_STORAGE_BUCKET_NAME 
AWS_QUERYSTRING_AUTH = False 
 
 
# general static / media settings 
STATIC_URL = '/static/' 
STATIC_ROOT = 'staticfiles' 
 
MEDIA_URL = '%smedia/' % STATIC_URL  
MEDIA_ROOT = '/static/media/' 
ADMIN_MEDIA_PREFIX = '%sadmin' % STATIC_URL  
 
STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, 'static'), 
    # ... 
] 
[...] 

我对 Django 有一些经验,但这是我涉及 AWS 和 boto 的第一个项目。任何帮助,将不胜感激。提前谢谢你。

请您参考如下方法:

我在我的配置目录中创建了一个 custom_storages.py,如下所示:

from django.conf import settings 
from storages.backends.s3boto3 import S3Boto3Storage 
 
 
class StaticStorage(S3Boto3Storage): 
    location = settings.STATICFILES_LOCATION 
 
 
class MediaStorage(S3Boto3Storage): 
    location = settings.MEDIAFILES_LOCATION 
    file_overwrite = False 

然后在我的设置中:

STATICFILES_STORAGE = 'config.custom_storages.StaticStorage' 
DEFAULT_FILE_STORAGE = 'config.custom_storages.MediaStorage' 

您应该能够对 DEFAULT_FILE_STORAGE 执行相同的操作。祝你好运!