Python Django collectstatic没有给出错误。但静态文件不会加载到网站上。S3上的文件。与Zappa合作的Lambda项目

Python Django collectstatic没有给出错误。但静态文件不会加载到网站上。S3上的文件。与Zappa合作的Lambda项目,python,django,amazon-web-services,amazon-s3,django-staticfiles,Python,Django,Amazon Web Services,Amazon S3,Django Staticfiles,简介:我已经在Django中创建了我的应用程序,我正在尝试将我的静态和媒体文件托管在aws s3中。我的Django项目位于使用Zappa的AWS Lambda和AWS Api网关上。下面是我的设置.py AWS_DEFAULT_ACL = None STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ] DEFAULT_FILE_STORAGE = 'aws_storage_classes.MediaStorage' AWS_A

简介:我已经在Django中创建了我的应用程序,我正在尝试将我的静态和媒体文件托管在aws s3中。我的Django项目位于使用
Zappa
AWS Lambda
AWS Api网关上。下面是我的设置.py

AWS_DEFAULT_ACL = None
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
DEFAULT_FILE_STORAGE = 'aws_storage_classes.MediaStorage'
AWS_ACCESS_KEY_ID = os.getenv("ACCESS_KEY")
AWS_SECRET_ACCESS_KEY = os.getenv("ACCESS_SECRET_KEY")
AWS_STORAGE_BUCKET_NAME = os.getenv("AWS_STORAGE_BUCKET_NAME")
STATICFILES_STORAGE = 'aws_storage_classes.StaticStorage'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

AWS_S3_DOMAIN = "%s.s3.amazonaws.com" % AWS_STORAGE_BUCKET_NAME

STATIC_URL = 'https://%s.static/' % AWS_S3_DOMAIN
MEDIA_URL = 'https://%s.media/' % AWS_S3_DOMAIN

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
然后,我在项目文件夹中创建了一个与manage.py相同的文件,名为
aws\u storage\u classes.py

下面是我的文件
aws\u storage\u classes.py的内容

from storages.backends.s3boto3 import S3Boto3Storage    

class StaticStorage(S3Boto3Storage):
    location = 'static'

class MediaStorage(S3Boto3Storage):
    location = 'media'
下面是我的
URL

if settings.DEBUG:

    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
也在my settings.py中

AWS_DEFAULT_ACL = None
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
DEFAULT_FILE_STORAGE = 'aws_storage_classes.MediaStorage'
AWS_ACCESS_KEY_ID = os.getenv("ACCESS_KEY")
AWS_SECRET_ACCESS_KEY = os.getenv("ACCESS_SECRET_KEY")
AWS_STORAGE_BUCKET_NAME = os.getenv("AWS_STORAGE_BUCKET_NAME")
STATICFILES_STORAGE = 'aws_storage_classes.StaticStorage'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

AWS_S3_DOMAIN = "%s.s3.amazonaws.com" % AWS_STORAGE_BUCKET_NAME

STATIC_URL = 'https://%s.static/' % AWS_S3_DOMAIN
MEDIA_URL = 'https://%s.media/' % AWS_S3_DOMAIN

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
DEBUG=False

当我执行
python manage.py collectstatic
时,所有静态文件都会被下载,并且不会出现任何错误。但是当进入管理页面时,静态文件不会被上传。见下图

下面是我的S3存储桶的图片

下面是静态文件夹中的内容

静态文件未加载

下面是添加
ADMIN\u MEDIA\u PREFIX=STATIC\u URL+'ADMIN/'


问题是你的url应该是/static/admin/style.css/。。。。要解决此问题,请将以下内容添加到settings.py文件中

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

问题是你的url应该是/static/admin/style.css/。。。。要解决此问题,请将以下内容添加到settings.py文件中

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'


设置DEBUG=True时是否显示静态文件?@ThomasMyers否它们不显示清除缓存了吗?在chrome或firefox中使用查看页面源代码检查静态文件的路径?如果是这样的话,应该是这样的。请共享路径。@ThomasMyers我已经添加了一个链接,您的文件上传到“static”文件夹中,但是在设置中,您试图使用“staticfiles”文件夹访问这些文件。请在aws中将静态文件更改为静态文件,或在代码中将静态文件更改为静态文件。当您设置DEBUG=True时,是否显示静态文件?@ThomasMyers否它们不显示清除缓存了吗?在chrome或firefox中使用查看页面源代码检查静态文件的路径?如果是这样的话,应该是这样的。请共享路径。@ThomasMyers我已经添加了一个链接,您的文件上传到“static”文件夹中,但是在设置中,您试图使用“staticfiles”文件夹访问这些文件。请在aws中将静态文件更改为静态文件,或者在代码中将静态文件更改为静态文件。不,请不要这样做。我已经添加了我对上面代码所做的更改+我重新启动了我的服务器它是否更改了url?请确认您输入了url,而这不是它实际显示的内容。不,出于安全原因,我没有在这里添加bucket名称。链接有bucket名称OK只是想确保我们在同一页上。请确保在更改后再次运行collect static。我已将带有代码的新链接添加到上面的问号中。我已经添加了我对上面代码所做的更改+我重新启动了我的服务器它是否更改了url?请确认您输入了url,而这不是它实际显示的内容。不,出于安全原因,我没有在这里添加bucket名称。链接有bucket名称OK只是想确保我们在同一页上。确保在更改后再次运行collect static。我已将带有代码的新链接添加到上述问题中