【发布时间】:2017-01-13 19:17:39
【问题描述】:
我正在使用Generating dynamic image URLs in Python 中显示的技术通过 Wagtail 之外的 API 端点在页面上加载大量缩略图。起初这似乎可行,但在使用 Webkit Inspector 仔细检查后,似乎所有缩略图都是在每次页面加载时生成的,而不是从缓存中提供的。
文档说“再现是在第一次调用时生成的,随后的调用是从缓存中提供的。”
但在 Inspector 中,我看到每个缩略图都会生成 200,而不是 304,并且它们仅在我在“网络”选项卡中选择“全部”(而非图像)时才会显示。 Inspector 显示调用属于“文档”类型(不是图像)。
我正在使用的代码:
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
一个示例图像 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 就好了。
【问题讨论】: