Versioned media files using template tags

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from django import template
from django.conf import settings

register = template.Library()

def get_version(version_attr):
  """
  Return the version number from the settings.py file or None if it is not set
  
  Example: (If settings.IMAGE_VERSION = 2)
  get_version('IMAGE_VERSION')
  
  Returns:
  2
  """
  try:
    version = getattr(settings, version_attr)
  except AttributeError:
    version = None

  return version

def version_url(url_string, version = None):
  """
  Returns a version url concatenated with the settings.MEDIA_URL
  
  Example: (If settings.MEDIA_URL = '/media/')
  
  version_url('js/jquery.js', 5)
  
  Returns:
  
  /media/js/5/jquery.js
  """
  parts = url_string.rpartition('/')
  
  if version:
    url_string = parts[0] + '/' + str(version) + '/' + parts[2]

  return settings.MEDIA_URL + url_string

@register.simple_tag
def image_url(url_string):
  """
  Returns a versioned url
  
  Example: (If settings.MEDIA_URL = '/media/' and settings.IMAGE_VERSION = 2
  {% load media_url %}
  {% image_url "images/favicon.ico" %}
  
  Returns:
  
  /media/images/2/favicon.ico
  """
  return version_url(url_string, get_version('IMAGE_VERSION'))

@register.simple_tag
def css_url(url_string):
  """
  Returns a versioned url
  
  Example: (If settings.MEDIA_URL = '/media/' and settings.CSS_VERSION = 2
  {% load media_url %}
  {% css_url "css/style.css" %}
  
  Returns:
  
  /media/css/2/style.css
  """
  return version_url(url_string, get_version('CSS_VERSION'))

@register.simple_tag
def js_url(url_string):
  """
  Returns a versioned url
  
  Example: (If settings.MEDIA_URL = '/media/' and settings.JS_VERSION = 2
  {% load media_url %}
  {% js_url "js/jquery.js" %}
  
  Returns:
  
  /media/js/2/jquery.js
  """
  return version_url(url_string, get_version('JS_VERSION'))

Comments

(Forgotten your password?)

You may use Markdown syntax here, but raw HTML will be removed.