2015-04-26 37 views
0

我有一个包含图像的网页。我希望缓存使用图像的半身像?技术。但是,staticfiles将问题编码为'%3F',所以路径不再正确。如何使用Django的静态文件缓存半身像?

{% load staticfiles %} 
<img src="{% static 'poll/img/test.jpg?v2' %}"> 

获取编译为。

<img src="/static/poll/img/test.jpg%3Fv2"> 

没有test.jpg%3Fv2文件。所以它不显示。使用static它工作正常。

{% load static %} 
<img src="{% static 'poll/img/test.jpg?v2' %}"> 

按照预期编译完成。我想使用staticfiles而不是static,因为我服务的是来自云服务的静态文件。有没有办法来防止我的字符串路径的编码或解决问题的方法?

+0

我会告诉你使用[ManifestStaticFilesStorage(https://docs.djangoproject.com/en/1.8/ref/contrib/staticfiles/#manifeststaticfilesstorage),但它为你使用是不可能的一项云服务。您的云服务是否提供了类似的缓存清除解决方案? – aumo

+0

我使用S3和cloudfront。我可以清除记录并重新上传同名的上传文件名,希望新版本可以供所有人使用,并且浏览器不会保留旧版本。忽略远期缓存过期。这似乎有风险和不可靠。我宁愿只保留“?”我知道这会产生一个令人满意的结果。 我使用'django-compressor',它为css和js文件生成一个唯一的名称。可悲的是,它不支持图像。 – Damgaard

+0

好吧,我想你可以用'staticfiles'的模板标签代码编写一个自定义模板标签,但是可以按照你需要的方式处理GET参数。 – aumo

回答

3

要解决编码问题,可以编写自己的静态标签版本,或者直接将参数移动到标签之外。

{% load staticfiles %} 
<img src="{% static 'poll/img/test.jpg' %}?v2">