Django 1.3 静态文件 + django-compressor + CloudFront

0 投票
2 回答
838 浏览
提问于 2025-04-17 12:14

我们正在考虑使用Django 1.3的静态文件功能和django-compressor,把我们的媒体文件放到CloudFront上。不过,我们在想怎么给最终的URL加上一个独特的缓存标识,这样就不用每次都去创建新的分发或者请求失效。

有没有人能给我们一些关于如何用静态文件和django-compressor来实现这个的例子?比如说,

/aks290209sdlk/media/css/base.css

每次我们部署的时候,改变一下哈希值:

/fslk39sod/media/css/base.css

这就意味着{% static %}这个模板标签也需要知道这个变化。我们有多个应用服务器,所以我们做的任何事情都需要在它们之间保持同步。

2 个回答

0

你有没有可能把DEBUG设置为True呢?我记得django-compressor只有在DEBUG设置为False的时候才会进行哈希处理。

0

这不是你问题的直接答案,但因为你提到在评估资产管理工具,所以也算是相关的内容。

我对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中定义好你的资产,然后再引用它们。

撰写回答