我使用Generating dynamic image URLs in Python中显示的技术,通过Wagtail外部的API端点在页面上加载了大量缩略图。这似乎最初起作用,但是在仔细检查Webkit Inspector之后,似乎所有缩略图都是在每个页面加载时生成的,而不是从缓存中提供的。
文档说"再现是在第一次调用时生成的,后续调用是从缓存中提供的。"
但是在Inspector中,我发现每个缩略图都会生成一个200而不是304,它们只会在我选择" All" “网络”选项卡中的(不是“图像”)。 Inspector显示调用的类型为" document" (不是图像)。
我使用的代码:
image = s.main_image()
filter_spec = 'fill-300x186|jpegquality-60'
signature = generate_signature(image.id, filter_spec)
url = reverse('wagtailimages_serve', args=(signature, image.id, filter_spec))
url += image.file.name[len('original_images/'):]
shop['img_url'] = url
示例图片网址为:
/images/OGJXq3f3oz0AAzD9vFo-HE24Sz8=/414/fill-300x186%7Cjpegquality-60/ceram_marhc_2920120329_0247_1_Sia8Kgl.jpg
想法?
更新:虽然接受的答案有效,但事实证明我们过于复杂了。更好的方法是不使用自定义签名和url生成例程。相反,只需使用Wagtail的get_rendition()
方法:
image = s.main_image()
shop['img_url'] = image.get_rendition('fill-300x186|jpegquality-60').url
并且根本不使用URL装饰器。在第一次访问时生成并存储图像,并在随后的访问中返回304就好了。
答案 0 :(得分:1)
使用Wagtail的generate_signature
函数生成的图片网址不会被浏览器自动缓存。这是因为默认情况下,对于这些网址的请求,请求标头中没有cache-control
设置。
然而,有一种解决办法(无证件,reference)。要在使用generate_signature
创建的图像URL的请求标头中实现缓存控制参数,您需要使用缓存控制max-age装饰图像URL,如下所示:
from django.views.decorators.cache import cache_control
...
from wagtail.wagtailimages import urls as wagtailimages_urls
from wagtail.utils.urlpatterns import decorate_urlpatterns
# attach cache-control parameter to your /images/* URL
urlpatterns += decorate_urlpatterns(
[url(r'^images/', include(wagtailimages_urls))],
cache_control(max_age=1209600)
)
对/images
处的任何图片网址的所有请求现在都会在响应标头中包含cache-control: max-age=120900
参数,并且会被浏览器缓存。