from textwrap import dedent from django import forms from django.conf import settings from django.template import Context, Template from lxml import html class CompressorWidgetMixin(object): __template_css = dedent( """\ {% compress css %} {{ media.css }} {% endcompress %} """ ) __template_js = dedent( """\ {% compress js %} {{ media.js }} {% endcompress %} """ ) __templates = { (False, False): Template(""), (True, False): Template("{% load compress %}" + __template_css), (False, True): Template("{% load compress %}" + __template_js), (True, True): Template("{% load compress %}" + __template_js + __template_css), } compress_css = False compress_js = False try: import compressor except ImportError: pass else: if getattr(settings, "COMPRESS_ENABLED", not settings.DEBUG): @property def media(self): media = super().media template = self.__templates[self.compress_css, self.compress_js] result = html.fromstring(template.render(Context({"media": media}))) return forms.Media( css={"all": [result.find(".//link").get("href")]} if self.compress_css else media._css, js=[result.find(".//script").get("src")] if self.compress_js else media._js, )