Python Django collectstatic没有给出错误。但静态文件不会加载到网站上。S3上的文件。与Zappa合作的Lambda项目
简介:我已经在Django中创建了我的应用程序,我正在尝试将我的静态和媒体文件托管在aws s3中。我的Django项目位于使用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
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。我已将带有代码的新链接添加到上述问题中