Django 1.3 静态文件 + django-compressor + CloudFront
我们正在考虑使用Django 1.3的静态文件功能和django-compressor,把我们的媒体文件放到CloudFront上。不过,我们在想怎么给最终的URL加上一个独特的缓存标识,这样就不用每次都去创建新的分发或者请求失效。
有没有人能给我们一些关于如何用静态文件和django-compressor来实现这个的例子?比如说,
/aks290209sdlk/media/css/base.css
每次我们部署的时候,改变一下哈希值:
/fslk39sod/media/css/base.css
这就意味着{% static %}这个模板标签也需要知道这个变化。我们有多个应用服务器,所以我们做的任何事情都需要在它们之间保持同步。
2 个回答
你有没有可能把DEBUG设置为True呢?我记得django-compressor只有在DEBUG设置为False的时候才会进行哈希处理。
这不是你问题的直接答案,但因为你提到在评估资产管理工具,所以也算是相关的内容。
我对django-compressor不太了解,但个人觉得其他一些资产管理工具用起来更简单、更好。你可以根据自己的需求,从这里选择一个合适的工具:http://www.djangopackages.com/grids/g/asset-managers/。我现在用的是django-mediagenerator,这个工具非常简单易用,但功能强大。首先,你需要在settings.py文件中定义媒体包:
MEDIA_BUNDLES = (
('main.css',
'css/reset.css',
'css/design.css',
),
('main.js',
'js/jquery.js',
'js/jquery.autocomplete.js',
),
)
然后在settings.py中定义媒体处理路径:
ROOT_MEDIA_FILTERS = {
'js': 'mediagenerator.filters.yuicompressor.YUICompressor',
'css': 'mediagenerator.filters.yuicompressor.YUICompressor',
}
-- 你可以把脚本合并、压缩,然后合成一个文件,还可以给它们加上哈希值等等。
接着你只需运行:./manage.py generatemedia
,就大功告成了(当然,实际上还有一些设置需要在settings.py中输入,但都不难搞定)。
在模板中,它的表现是这样的:
{% include_media 'main.css' media='screen,print' %}
<img src="{% media_url 'some/image.png' %}" />
可以看到,这种方式和django-compressor的做法正好相反——在这里,你先在settings.py中定义好你的资产,然后再引用它们。