【问题标题】:Linking to AWS S3 direct image uploads in Django templates在 Django 模板中链接到 AWS S3 直接图像上传
【发布时间】:2019-11-26 01:28:54
【问题描述】:

我正在通过 django-storages 为我的 Django 项目中的图像使用 AWS S3 存储桶。

如何在通过模型 ImageField 上传的模板中显示图像非常清楚。只是做例如

<img src="{{ model.image.url }}">

但是,如果我直接在 S3 上上传图片(例如用于网站徽标)并希望在模板中显示它怎么办?硬编码绝对 Amazon S3 路径的更好方法:

<img src="https://myapp.s3.amazonaws.com/home/logo.png">

有没有什么方法可以只使用相对的“/home/logo.png”而不用硬编码amazonaws子域?

编辑:目前这是我的 settings.py 文件中的内容:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

我的静态文件收集在 Heroku 上的 /staticfiles/ 目录中,所有模型 ImageField 上传最终都在 S3...

当我按照建议的here 执行python manage.py collectfiles 时,所发生的只是所有静态文件也被复制到我的本地/staticfiles/ 目录中。

【问题讨论】:

    标签: django amazon-s3


    【解决方案1】:

    您不需要硬编码!我不知道您的设置细节,但如果您查看this article 可能会有所帮助。特别是 settings.py 部分。

    【讨论】:

    • 我确实遇到过 - 谢谢。这在我的情况下不起作用。我没有将本地媒体文件上传到 S3,而是从 Heroku 下载远程静态文件到我的本地 /staticfiles/ 文件夹...我在原始帖子中添加了一些关于我的 settings.py 文件的详细信息。
    【解决方案2】:

    网站徽标应该进入 VCS(版本控制,您的存储库),在 static 或任何您想要命名的文件夹中。然后,当您执行python manage.py collectstatic 时,文件将上传到 S3。之后,您只需在模板中执行以下操作:

    {% load static %}
    <img src="{% static 'img/logo.png' %}" alt="logo"> 
    

    【讨论】:

    • 谢谢,@Dalvtor。我对我的原始帖子进行了一些编辑。当我进行 collectstatic 时,所发生的只是我的远程静态文件(不是媒体文件)被收集到我的本地 /staticfiles/ 文件夹中。
    猜你喜欢
    • 2018-01-28
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2018-12-31
    • 2018-12-15
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多