社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Django collectstatic没有错误。但静态文件没有加载到网站上调试的真假。S3上的文件

MarcoBianchi • 5 年前 • 1367 次点击  

简介: 我在Django开发了我的应用程序,我正在尝试将我的静态和媒体文件托管在aws s3中。我的Django项目正在进行 AWS Lambda AWS Api gateway 使用 Zappa . 下面是我的设置.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_storage_classes.py

以下是我的文件内容 aws_storage_classes.py类

from storages.backends.s3boto3 import S3Boto3Storage    

class StaticStorage(S3Boto3Storage):
    location = 'static'

class MediaStorage(S3Boto3Storage):
    location = 'media'

下面是我的 urls

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中

调试=错误

当我这样做的时候 python manage.py collectstatic 所有的静态文件都已下载,我没有任何错误。但是当进入管理页面时,静态文件不会被上传。见下图

下面是我的S3桶的图片

enter image description here

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

enter image description here

未加载静态文件

enter image description here

<link rel="stylesheet" type="text/css" href="https://<bucketname>.s3.amazonaws.com/static/style.css?AWSAccessKeyId=AKIAJHJGHJGJGJGJJGJGJMHIFQ&amp;Signature=yfS3%2BvA0q15aUxw7OBySuQWZfjg%3D&amp;x-amz-security-token=FQoGZXIvYXdgljdaksfgdjsgfkjertert;hre;thtires=151232173">

已更新设置.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

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

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

下面是添加后的链接 ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

<link rel="stylesheet" type="text/css" href="https://django-static-media.s3.amazonaws.com/static/style.css?AWSAccessKeyId=AKIAGGGGGGGGGMHIFQ&amp;Signature=6gFQTsOSDFSDFA%3D&amp;x-amz-security-token=FQoGZvwbJhd9amp;Expires=1549168642">

仍然没有加载静态文件

我已经给了我的用户完全的s3访问权限,所以我认为我不需要下面的内容。另外,我还成功地在S3中添加了静态文件,它没有给我任何与权限相关的错误。仍然按照下面的建议尝试

以下是我的权限 我试图允许lambda函数,但它给了我如下的错误

enter image description here

enter image description here

更改静态和媒体URL之后

enter image description here

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50683
 
1367 次点击  
文章 [ 1 ]  |  最新文章 5 年前
anjaneyulubatta505
Reply   •   1 楼
anjaneyulubatta505    6 年前

我看得出来 STATIC_URL MEDIA_URL 设置不正确。

改变

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

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

它应该有用。

下面的链接有一个很好的解释。 https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html