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
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):