如何在Django应用程序中重新加载某些Web图像,而不是从缓存中重新加载?

时间:2015-05-11 17:36:30

标签: django image caching

我的Django 1.62。应用程序包含一个“show_members”视图/模板,显示名称和 我网站上所有成员的照片。问题是我必须先检查每个成员的照片,然后才能在show_members页面上显示。因此,当新成员加入时,我会显示占位符图像,直到我审核并批准他们的照片为止。完成后,他们的真实照片应显示在该页面上。

现在,我对占位符图片和真实照片使用相同的名称。这使我可以使用此HTML轻松地在show_members页面上显示任一图像:

<!-- Part of show_members.html   placeholder and photo both named username_thumb.jpg -->
<img src="{{ MEDIA_URL }}photos/approved/{{ username }}/{{ username }}_thumb.jpg" />

问题在于,当新用户首次加入网站时,show_members模板将显示其占位符图像(来自服务器)以及其他网站成员的照片(通常来自客户端的浏览器缓存)。但是,一旦我批准了新用户照片,他们的旧占位符图片将继续显示在客户端浏览器中,除非客户端的用户在绕过其缓存时强制刷新。

有没有办法可以通过编程方式强制show_templates页面从服务器重新生成新用户的新批准的照片,同时仍然为其他用户检索缓存的图像?我意识到我可以为占位符图像和已批准的照片指定不同的名称,然后将布尔值传递给模板并使用它来显示其中一个。然而,这似乎是一个相当不优雅的解决方案。还有其他习惯方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

你可以做的只是在图像后放一个查询参数,这样就可以重新加载缓存:

<img src="{{ MEDIA_URL }}photos/approved/{{ username }}/{{ username }}_thumb.jpg?v={{ username.updated_at }}" />

在此示例中,我假设您有一个updated_at字段,该字段对应于您上次更新模型的日期时间。