使用Django为图像设置远期未来的最佳方法是什么?

And*_*w C 5 django

我正在使用django-compress,远期将来我的css和js文件到期.效果很好.

我想为其他静态内容(图像,闪光等)做类似的事情.我可以设置这个内容的远期未来,但我必须在文件更改时手动重命名.

有没有更好的方法来处理这个?

ori*_*rip 6

最好的方法是使用版本化的URL引用静态文件,并为Web服务器提供重写规则以忽略该版本.

在这里查看完整的Django示例,其中包括一个expire_tag帮助程序(由Arne Brodowski创建):

<link rel="stylesheet" type="text/css" 
  href="{{ MEDIA_URL }}{% expire_tag "css/reset.css" %}" />
Run Code Online (Sandbox Code Playgroud)

以及相关的Apache重写规则.


Vin*_*jip 4

使用django-compress,您可以将 CSS 和 JS 视为动态文件 - 这很好。然而,其他文件是静态的——Django 并不真正想提供这些文件。它们应该直接由 Apache 或其他网络服务器提供服务。

对于 Apache,你可以输入类似的内容

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

.htaccess或全局 Apache 配置中。

更新:回复您的评论 - 抱歉,我不明白您问题的细微差别。您无法避免使用不同的 URL 向客户端指示文件(例如图像)已更改。这是 Apache 和 YAHOO! 等推荐的。

在我看来,实现这一点并不难。它分为两部分:

  1. 使用标签(这里是一个有用的代码片段)生成媒体文件的版本化 URL,这些文件将出现在您的 HTML 中。版本化URL 可以是插入了版本的基本URL,例如/media/3/header.png实际文件保留/media/header.png在服务器上的位置。
  2. 使用诸如将传入 URL 转换为规范值之类的工具mod_rewrite,即将 的请求/media/3/header.png转换为/media/header.png. 本文更详细地描述了该功能。