使用Django static从GCP存储桶获取背景图像

问题描述

我正在使用django-storages GCP存储后端从存储桶向我的站点提供静态服务。但是,将background-image CSS属性与Django的{% static %}标记结合使用时遇到了问题。特别是,我在页面中嵌入了以下CSS:

<style> 
.my-background {
     background-image: url({% static 'foo/bar/example.jpg' %});
}
</style>

然后,如果我在页面的HTML中包含以下内容

<div class="my-background"></div>
<img src="{% static 'foo/bar/example.jpg' %}">

<img>标记可以很好地检索图像,但是background-image收到403错误,并从存储桶调用返回了AccessDenied。我不知道为什么要区别对待它们,任何帮助都值得赞赏。

解决方法

我想出了一个解决方案:将background-image: url({% static 'foo/bar/example.jpg' %})包含在单独的<style>标记中会失败,但是如果以嵌入式样式指定背景图像则可以使用。我怀疑这是由于django存储使用签名的URL访问存储桶而导致的,它可能在加载样式标签和调用存储桶之间已经过期。