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