python - 在heroku上运行时Django没有正确上传到S3
问题描述
我正在尝试使用 S3 上传图像字段,在我的本地环境中它工作得非常好,所以我很困惑,为什么当它在 heroku 上时,它将 URL 读取为双字符串加上 s3%,这是没有意义的。所有其他静态文件都可以正常工作。
我已经尝试过更改 STATICFILES_STORAGE 和 DEFAULT_FILE_STORAGE ,甚至将其命名为相同的东西,但只会产生更多错误,我对为什么这不起作用感到困惑。
def vehicle_view(request, *args, **kwargs):
vehicles = Vehicle.objects.all()
simple = get_object_or_404(Vehicle, id=2)
context = {
"vehicles": vehicles,
"simple": simple
}
return render(request, "vehicle/vehicle.html", context)
class Vehicle(models.Model):
vehicle_type = models.CharField(max_length=255)
vehicle_id = models.CharField(max_length=255)
image_url = models.ImageField(upload_to="img/", blank=True, null=True)
checked = models.BooleanField(default=False)
nfmc_step = models.ManyToManyField(TM, related_name='step')
AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.getenv('AWS_STORAGE_BUCKET_NAME')
AWS_DEFAULT_ACL = 'public-read'
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}
# s3 static settings
AWS_S3_FILE_OVERWRITE = True
AWS_LOCATION = 'static'
STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{AWS_LOCATION}/'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_LOCATION = 'static'
MEDIAFILES_LOCATION = 'media'
{% load static %}
{% for vehicle in vehicles %}
<div class="col">
<div class="card" style="width: 18rem;">
<img src="{% static vehicle.image_url.url %}" class="card-img-top" alt="...">
{% endfor %}
Expected result as in my local machine: https://project-name.s3.amazonaws.com/static/1.jpg
What I get: https://project-name.s3.amazonaws.com/static/https%3A/project-name.s3.amazonaws.com/static/img/2_aeS9ZS2.jpg
解决方案
推荐阅读
- sql - 具有唯一索引的 Postgres 中“DROP NOT NULL”的性能影响
- python - 使用 pyinstaller 生成 .exe 后,它给了我错误(没有名为 exchangelib 的模块)
- vim - 有没有办法在 VIM 多行注释中禁用 * 字符的自动插入?
- scala - 从 Scala 中的逻辑表达式打印
- r - 如何在R中组合来自不同数据帧的两个变量?
- python - 编译/执行未能在其自己的范围内分配值,导致内部语法错误
- python - 在 PYTHONPATH 元素的顶部导入两个具有相同名称的模块
- wordpress - 错误:文件无法写入磁盘 | WP、FTP、主机
- bash - 在 Ansible 中执行另一个命令之前,如何编写一个需要 15 分钟才能运行的 bash 命令?
- c# - C# gRPC 使用截止日期而不是取消令牌