Да, я думал чтобы использовать ManifestStaticFilesStorage или Compress. Но у меня на столько мелкая задача, что хотелось бы обойтись небольшим объемом кода.
Кстати нашел более "кошерный" способ реализиции тега:
#custom_static.py
class VersionedStaticFilesNode(StaticNode):
@classmethod
def handle_simple(cls, path):
path = super().handle_simple(path)
filetypes = getattr(local, 'STATIC_FILETYPES', None)
version = getattr(local, 'STATIC_VERSION', None)
if filetypes and any(map(path.endswith, filetypes)):
path = "{path}?v={version}".format(path=path, version=version)
return path
@register.tag('static')
def do_static(parser, token):
return VersionedStaticFilesNode.handle_token(parser, token)
def static(path):
return VersionedStaticFilesNode.handle_simple(path)
#settings.py
from checksumdir import dirhash
STATIC_ROOT = join(BASE_DIR, 'static')
STATIC_VERSION = dirhash(STATIC_ROOT)[:6]
STATIC_FILETYPES = ('.css', '.js', )
Хеш-версии вычисляется при старте сервера. В моем случае затрачивается не более 50мс. Т.о. если файлы менялись, то вычислится новый хеш, если не менялись, то тот же что и был в прошлый раз. STATIC_FILETYPES позволяет добавлять версию только необходимым типам файлов.