from django.template.defaultfilters import filesizeformat from django.contrib.staticfiles.templatetags.staticfiles import static FILE_STUB_IMAGE = 'images/file.png' FILE_TYPES_VIDEO = ( 'webm', 'mp4', ) FILE_TYPE_SVG = 'svg' FILE_TYPES_AUDIO = ( 'ogg', 'mp3', ) def get_viewers(): return AbstractViewer.__subclasses__() class AbstractViewer: def __init__(self, file, file_type): self.file = file self.file_type = file_type @staticmethod def supports(file_type): return True def get_view(self): return '
'\ '{}'\ '
{}, {}
'\ '
'.format(self.get_format_view(), self.file.url, self.file_type, filesizeformat(self.file.size)) def get_format_view(self): return ''\ ''\ ''.format(self.file.url, static(FILE_STUB_IMAGE)) class VideoViewer(AbstractViewer): @staticmethod def supports(file_type): return file_type in FILE_TYPES_VIDEO def get_format_view(self): return ''\ .format(self.file.url) class AudioViewer(AbstractViewer): @staticmethod def supports(file_type): return file_type in FILE_TYPES_AUDIO def get_format_view(self): return ''.format(self.file.url) class SvgViewer(AbstractViewer): @staticmethod def supports(file_type): return file_type == FILE_TYPE_SVG def get_format_view(self): return ''\ ''\ ''.format(self.file.url, self.file.url)