Django静态文件URLS损坏

达汀

我正在使用Boto2帮助在heroku上与我的Django-admin应用程序进行s3集成。我的静态文件中某些URL生成不正确。例子:

https://BUCKET.s3.amazonaws.com/FOLDER/static/admin?Signature=XXX&Expires=YYY&AWSAccessKeyId=ZZZimg/icon_calendar.gif

什么时候应该

https://BUCKET.s3.amazonaws.com/FOLDER/static/admin/img/icon_calendar.gif?Signature=XXX&Expires=YYY&AWSAccessKeyId=ZZZ

请注意,这img/icon_calendar.gif不合适。我能想到的唯一导致此问题的原因是我用来在存储桶的子文件夹上制作静态文件的代码。它基于此SO解决方案

#s3utils.py
from storages.backends.s3boto import S3BotoStorage
import  os

STATIC_ROOT = 'FOLDER/static'
MEDIA_ROOT = 'FOLDER/media'

StaticRootS3BotoStorage = lambda: S3BotoStorage(location=STATIC_ROOT)
MediaRootS3BotoStorage  = lambda: S3BotoStorage(location=MEDIA_ROOT)

#settings.py
...
AWS_STORAGE_BUCKET_NAME = "BUCKET"
AWS_ACCESS_KEY_ID = 'ZZZ'
AWS_SECRET_ACCESS_KEY = 'AAAA'
DEFAULT_FILE_STORAGE = 'app.s3utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'app.s3utils.StaticRootS3BotoStorage'

S3_URL = 'http://%s.s3.amazonaws.com/' % (AWS_STORAGE_BUCKET_NAME)

STATIC_ROOT = '/FOLDER/static/'
MEDIA_ROOT = '/FOLDER/media/'

STATIC_URL = '%sFOLDER/static/' % (S3_URL)
MEDIA_URL = '%sFOLDER/media/' % (S3_URL)

是什么导致URL损坏?

达汀

我在此git repo中找到了解决方法我的s3utils.py文件现在看起来像

#s3utils.py
from storages.backends.s3boto import S3BotoStorage
import  os

STATIC_ROOT = 'FOLDER/static'
MEDIA_ROOT = 'FOLDER/media'

class FixedS3BotoStorage(S3BotoStorage):
    def url(self, name):
        url = super(FixedS3BotoStorage, self).url(name)
        if name.endswith('/') and not url.endswith('/'):
            url += '/'
        return url

StaticRootS3BotoStorage = lambda: FixedS3BotoStorage(location=STATIC_ROOT)
MediaRootS3BotoStorage  = lambda: FixedS3BotoStorage(location=MEDIA_ROOT)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章