Example #1
0
 def render(self, context, compress=settings.COMPRESS, offline=settings.OFFLINE):
     if compress and offline:
         key = get_offline_cachekey(self.nodelist)
         content = cache.get(key)
         if content:
             return content
     content = self.nodelist.render(context)
     if offline or not compress or not len(content.strip()):
         return content
     if self.kind == 'css':
         compressor = CssCompressor(content)
     if self.kind == 'js':
         compressor = JsCompressor(content)
     cachekey = "%s-%s" % (compressor.cachekey, self.mode)
     output = self.cache_get(cachekey)
     if output is None:
         try:
             if self.mode == OUTPUT_FILE:
                 output = compressor.output()
             else:
                 output = compressor.output_inline()
             self.cache_set(cachekey, output)
         except:
             from traceback import format_exc
             raise Exception(format_exc())
     return output
Example #2
0
                compressor_nodes.setdefault(template_name, []).extend(nodes)

        if not compressor_nodes:
            raise OfflineGenerationError("No 'compress' template tags found in templates.")

        if verbosity > 0:
            log.write("Found 'compress' tags in:\n\t" +
                      "\n\t".join(compressor_nodes.keys()) + "\n")

        log.write("Compressing... ")
        count = 0
        results = []
        context = Context(settings.OFFLINE_CONTEXT)
        for nodes in compressor_nodes.values():
            for node in nodes:
                key = get_offline_cachekey(node.nodelist)
                result = node.render(context, compress=True, offline=False)
                cache.set(key, result, settings.OFFLINE_TIMEOUT)
                results.append(result)
                count += 1
        log.write("done\nCompressed %d block(s) from %d template(s).\n"
                  % (count, len(compressor_nodes)))
        return count, results

    def walk_nodes(self, node):
        for node in getattr(node, "nodelist", []):
            if (isinstance(node, CompressorNode) or
                    node.__class__.__name__ == "CompressorNode"): # for 1.1.X
                yield node
            else:
                for node in self.walk_nodes(node):