Make URLs for assets cache-proof

https://www.pivotaltracker.com/story/show/113448149

This commit adds a query string to assets URLs which is generated from a hash
of the file contents. When asset files are changed they will now be served from
a different URL, which means they wont be loaded from browser cache.

This is similar to how GOV.UK template adds its version number as a querystring
parameter for its assets.

This is mostly copied from Digital Marketplace utils:
https://github.com/alphagov/digitalmarketplace-utils/pull/102

They have it in a shared codebase, we only have one frontend app so don’t need
to do that.

Usage in a template:
``` jinja
{{ asset_fingerprinter.get_url('stylesheets/application.css') }}
```

Output:
```
static/stylesheets/application.css?418e6f4a6cdf1142e45c072ed3e1c90a
```
This commit is contained in:
Chris Hill-Scott
2016-02-10 15:47:00 +00:00
parent 5fd8ca492d
commit 2f0cc99610
4 changed files with 150 additions and 6 deletions

View File

@@ -3,19 +3,19 @@
{% block head %}
<!--[if gt IE 8]><!-->
<link rel="stylesheet" media="screen" href="{{ asset_path }}stylesheets/main.css" />
<link rel="stylesheet" media="screen" href="{{ asset_url('stylesheets/main.css') }}" />
<!--<![endif]-->
<style>
#global-header-bar { background-color: {{header_colour}} }
</style>
<!--[if IE 6]>
<link rel="stylesheet" media="screen" href="{{ asset_path }}/stylesheets/main-ie6.css" />
<link rel="stylesheet" media="screen" href="{{ asset_url('stylesheets/main-ie6.css') }}" />
<![endif]-->
<!--[if IE 7]>
<link rel="stylesheet" media="screen" href="{{ asset_path }}/stylesheets/main-ie7.css" />
<link rel="stylesheet" media="screen" href="{{ asset_url('stylesheets/main-ie7.css') }}" />
<![endif]-->
<!--[if IE 8]>
<link rel="stylesheet" media="screen" href="{{ asset_path }}/stylesheets/main-ie8.css" />
<link rel="stylesheet" media="screen" href="{{ asset_url('stylesheets/main-ie8.css') }}" />
<![endif]-->
{% endblock %}
@@ -69,5 +69,5 @@
{% endblock %}
{% block body_end %}
<script type="text/javascript" src="{{ asset_path }}javascripts/all.js" /></script>
<script type="text/javascript" src="{{ asset_url('javascripts/all.js') }}" /></script>
{% endblock %}