
Setting up STATIC_URL dynamically for Subversion users
If you set STATIC_URL
to a static value, then each time you update a CSS file, JavaScript file, or image, you will need to clear the browser cache in order to see the changes. There is a trick to work around clearing the browser's cache. It is to have the revision number of the version control system shown in STATIC_URL
. Whenever the code is updated, the visitor's browser will force the loading of all-new static files.
This recipe shows how to put a revision number in STATIC_URL
for subversion users.
Getting ready
Make sure that your project is under the subversion version control and you have BASE_DIR
defined in your settings, as shown in the Defining relative paths in the settings recipe.
Then, create the utils
module in your Django project, and also create a file called misc.py
there.
How to do it…
The procedure to put the revision number in the STATIC_URL
setting consists of the following two steps:
- Insert the following content:
# utils/misc.py # -*- coding: UTF-8 -*- from __future__ import unicode_literals import subprocess def get_media_svn_revision(absolute_path): repo_dir = absolute_path svn_revision = subprocess.Popen( 'svn info | grep "Revision" | awk \'{print $2}\'', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, cwd=repo_dir, universal_newlines=True) rev = svn_revision.communicate()[0].partition('\n')[0] return rev
- Then, modify the
settings.py
file and add the following lines:# settings.py # … somewhere after BASE_DIR definition … from utils.misc import get_media_svn_revision STATIC_URL = "/static/%s/" % get_media_svn_revision(BASE_DIR)
How it works…
The get_media_svn_revision()
function takes the absolute_path
directory as a parameter and calls the svn
info shell command in that directory to find out the current revision. We pass BASE_DIR
to the function as we are sure that it is under version control. Then, the revision is parsed, returned, and included in the STATIC_URL
definition.
See also
- The Setting up STATIC_URL dynamically for Git users recipe
- The Setting the Subversion ignore property recipe