Django 在Subversion中更改文件时更新到资源(CSS/JS)的路径

Django 在Subversion中更改文件时更新到资源(CSS/JS)的路径,django,svn,browser-cache,Django,Svn,Browser Cache,偶尔我会从使用我的网站的人那里收到关于布局怪癖的报告,答案往往是,用Ctrl-F5刷新浏览器/清除缓存 我认为处理这个问题的最简单方法是将SVN修订附加到资源的路径中,如style.css?1234,但我想知道这是否有点过于繁重(例如,不更改资源的SVN修订将强制执行不必要的获取)。此外,还需要遍历并找到所有这些路径,并添加一些代码以输出SVN修订版 是否有更好的/标准的方法来处理此问题 值得一提的是,我使用了Django,Apache和mod_wsgi。最好使用文件的最后修改时间戳。这样就可以

偶尔我会从使用我的网站的人那里收到关于布局怪癖的报告,答案往往是,用Ctrl-F5刷新浏览器/清除缓存

我认为处理这个问题的最简单方法是将SVN修订附加到资源的路径中,如
style.css?1234
,但我想知道这是否有点过于繁重(例如,不更改资源的SVN修订将强制执行不必要的获取)。此外,还需要遍历并找到所有这些路径,并添加一些代码以输出SVN修订版

是否有更好的/标准的方法来处理此问题


值得一提的是,我使用了Django,Apache和mod_wsgi。

最好使用文件的最后修改时间戳。这样就可以避免在版本号方面遇到的问题。您还必须在每次请求时访问磁盘以获取最新版本号(如果使用此方法,请使用缓存),或者在部署时在“编译”步骤中更改include语句

此外,如果您使用
style.css?123
某些代理/浏览器可能根本不会缓存该文件,而不管过期标头如何。最好执行
style.123.css
,所有代理都将其视为一个单独的文件

有一个项目已经解决了这个问题,我用自己的努力取得了巨大的成功:。您告诉它您希望如何压缩javascript和css,然后它将缩小/压缩,将它们合并到一个大文件中,并给这个大文件一个包含时间戳的特殊文件名。当包含知道要包含哪个文件的文件时,还可以使用模板标记


Django 1.3还将包括一个名为的应用程序,它有助于提供静态媒体,但它不能解决版本控制问题。

我过去使用过的一种技术是确保对每个静态资产引用使用模板标记。然后,我可以根据需要更改该标记,如果需要更改资产目录的URL,也可以根据需要添加缓存破坏

即使文件没有更改,我也不会担心对每个SVN修订版强制执行不必要的获取-这仍然比每次提供一个新版本更有效


有各种各样的库为您做这类事情。knutin已经提到了django压缩,还有,可能还有很多其他的。除了处理缓存破坏,这些应用程序通常还包括某种压缩/连接,以便将多个CSS或JS文件连接成一个文件,以减少HTTP请求。

谢谢-django compress看起来正是我想要的。django compress刚刚开始运行,csstidy也在运行-很漂亮,谢谢!