Use the current context when rendering the output templates.
This commit is contained in:
		@@ -4,6 +4,7 @@ import codecs
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from django.conf import settings
 | 
					from django.conf import settings
 | 
				
			||||||
from django.core.files.base import ContentFile
 | 
					from django.core.files.base import ContentFile
 | 
				
			||||||
 | 
					from django.template import Context
 | 
				
			||||||
from django.template.loader import render_to_string
 | 
					from django.template.loader import render_to_string
 | 
				
			||||||
from django.utils.encoding import smart_unicode
 | 
					from django.utils.encoding import smart_unicode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -27,13 +28,14 @@ class Compressor(object):
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
    type = None
 | 
					    type = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, content=None, output_prefix="compressed"):
 | 
					    def __init__(self, content=None, output_prefix=None, context=None, *args, **kwargs):
 | 
				
			||||||
        self.content = content or ""
 | 
					        self.content = content or ""
 | 
				
			||||||
        self.output_prefix = output_prefix
 | 
					        self.output_prefix = output_prefix or "compressed"
 | 
				
			||||||
        self.output_dir = settings.COMPRESS_OUTPUT_DIR.strip('/')
 | 
					        self.output_dir = settings.COMPRESS_OUTPUT_DIR.strip('/')
 | 
				
			||||||
        self.charset = settings.DEFAULT_CHARSET
 | 
					        self.charset = settings.DEFAULT_CHARSET
 | 
				
			||||||
        self.storage = default_storage
 | 
					        self.storage = default_storage
 | 
				
			||||||
        self.split_content = []
 | 
					        self.split_content = []
 | 
				
			||||||
 | 
					        self.context = context or {}
 | 
				
			||||||
        self.extra_context = {}
 | 
					        self.extra_context = {}
 | 
				
			||||||
        self.all_mimetypes = dict(settings.COMPRESS_PRECOMPILERS)
 | 
					        self.all_mimetypes = dict(settings.COMPRESS_PRECOMPILERS)
 | 
				
			||||||
        self.finders = staticfiles.finders
 | 
					        self.finders = staticfiles.finders
 | 
				
			||||||
@@ -254,6 +256,9 @@ class Compressor(object):
 | 
				
			|||||||
        """
 | 
					        """
 | 
				
			||||||
        if context is None:
 | 
					        if context is None:
 | 
				
			||||||
            context = {}
 | 
					            context = {}
 | 
				
			||||||
        context.update(self.extra_context)
 | 
					        final_context = Context()
 | 
				
			||||||
        return render_to_string(
 | 
					        final_context.update(context)
 | 
				
			||||||
            "compressor/%s_%s.html" % (self.type, mode), context)
 | 
					        final_context.update(self.context)
 | 
				
			||||||
 | 
					        final_context.update(self.extra_context)
 | 
				
			||||||
 | 
					        return render_to_string("compressor/%s_%s.html" %
 | 
				
			||||||
 | 
					                                (self.type, mode), final_context)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,8 +8,9 @@ class CssCompressor(Compressor):
 | 
				
			|||||||
    template_name = "compressor/css.html"
 | 
					    template_name = "compressor/css.html"
 | 
				
			||||||
    template_name_inline = "compressor/css_inline.html"
 | 
					    template_name_inline = "compressor/css_inline.html"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, content=None, output_prefix="css"):
 | 
					    def __init__(self, content=None, output_prefix="css", context=None):
 | 
				
			||||||
        super(CssCompressor, self).__init__(content, output_prefix)
 | 
					        super(CssCompressor, self).__init__(content=content,
 | 
				
			||||||
 | 
					            output_prefix=output_prefix, context=context)
 | 
				
			||||||
        self.filters = list(settings.COMPRESS_CSS_FILTERS)
 | 
					        self.filters = list(settings.COMPRESS_CSS_FILTERS)
 | 
				
			||||||
        self.type = output_prefix
 | 
					        self.type = output_prefix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -35,7 +36,8 @@ class CssCompressor(Compressor):
 | 
				
			|||||||
                if self.media_nodes and self.media_nodes[-1][0] == media:
 | 
					                if self.media_nodes and self.media_nodes[-1][0] == media:
 | 
				
			||||||
                    self.media_nodes[-1][1].split_content.append(data)
 | 
					                    self.media_nodes[-1][1].split_content.append(data)
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
                    node = CssCompressor(self.parser.elem_str(elem))
 | 
					                    node = CssCompressor(content=self.parser.elem_str(elem),
 | 
				
			||||||
 | 
					                                         context=self.context)
 | 
				
			||||||
                    node.split_content.append(data)
 | 
					                    node.split_content.append(data)
 | 
				
			||||||
                    self.media_nodes.append((media, node))
 | 
					                    self.media_nodes.append((media, node))
 | 
				
			||||||
        return self.split_content
 | 
					        return self.split_content
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,8 +8,8 @@ class JsCompressor(Compressor):
 | 
				
			|||||||
    template_name = "compressor/js.html"
 | 
					    template_name = "compressor/js.html"
 | 
				
			||||||
    template_name_inline = "compressor/js_inline.html"
 | 
					    template_name_inline = "compressor/js_inline.html"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, content=None, output_prefix="js"):
 | 
					    def __init__(self, content=None, output_prefix="js", context=None):
 | 
				
			||||||
        super(JsCompressor, self).__init__(content, output_prefix)
 | 
					        super(JsCompressor, self).__init__(content, output_prefix, context)
 | 
				
			||||||
        self.filters = list(settings.COMPRESS_JS_FILTERS)
 | 
					        self.filters = list(settings.COMPRESS_JS_FILTERS)
 | 
				
			||||||
        self.type = output_prefix
 | 
					        self.type = output_prefix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,7 +70,8 @@ class CompressorNode(template.Node):
 | 
				
			|||||||
            return cached_offline
 | 
					            return cached_offline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # 3. Prepare the actual compressor and check cache
 | 
					        # 3. Prepare the actual compressor and check cache
 | 
				
			||||||
        compressor = self.compressor_cls(self.nodelist.render(context))
 | 
					        compressor = self.compressor_cls(content=self.nodelist.render(context),
 | 
				
			||||||
 | 
					                                         context=context)
 | 
				
			||||||
        cache_key, cache_content = self.render_cached(compressor, forced)
 | 
					        cache_key, cache_content = self.render_cached(compressor, forced)
 | 
				
			||||||
        if cache_content is not None:
 | 
					        if cache_content is not None:
 | 
				
			||||||
            return cache_content
 | 
					            return cache_content
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,6 +43,8 @@ HEAD
 | 
				
			|||||||
- Make use of `django-appconf`_ for settings handling and `versiontools`_
 | 
					- Make use of `django-appconf`_ for settings handling and `versiontools`_
 | 
				
			||||||
  for versions.
 | 
					  for versions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Uses the current context when rendering the render templates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. _`Slim It`: http://slimit.org/
 | 
					.. _`Slim It`: http://slimit.org/
 | 
				
			||||||
.. _`django-appconf`: http://django-appconf.rtfd.org/
 | 
					.. _`django-appconf`: http://django-appconf.rtfd.org/
 | 
				
			||||||
.. _`versiontools`: http://pypi.python.org/pypi/versiontools
 | 
					.. _`versiontools`: http://pypi.python.org/pypi/versiontools
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,11 +30,11 @@ class OfflineGenerationTestCase(TestCase):
 | 
				
			|||||||
        count, result = CompressCommand().compress()
 | 
					        count, result = CompressCommand().compress()
 | 
				
			||||||
        self.assertEqual(5, count)
 | 
					        self.assertEqual(5, count)
 | 
				
			||||||
        self.assertEqual([
 | 
					        self.assertEqual([
 | 
				
			||||||
            css_tag('/media/CACHE/css/cd579b7deb7d.css')+'\n',
 | 
					            css_tag('/media/CACHE/css/cd579b7deb7d.css'),
 | 
				
			||||||
            u'<script type="text/javascript" src="/media/CACHE/js/0a2bb9a287c0.js"></script>',
 | 
					            u'<script type="text/javascript" src="/media/CACHE/js/0a2bb9a287c0.js"></script>',
 | 
				
			||||||
            u'<script type="text/javascript" src="/media/CACHE/js/fb1736ad48b7.js"></script>',
 | 
					            u'<script type="text/javascript" src="/media/CACHE/js/fb1736ad48b7.js"></script>',
 | 
				
			||||||
            u'<script type="text/javascript" src="/media/CACHE/js/770a7311729e.js"></script>',
 | 
					            u'<script type="text/javascript" src="/media/CACHE/js/770a7311729e.js"></script>',
 | 
				
			||||||
            u'<link rel="stylesheet" href="/media/CACHE/css/67ed6aff7f7b.css" type="text/css" />\n',
 | 
					            u'<link rel="stylesheet" href="/media/CACHE/css/67ed6aff7f7b.css" type="text/css" />',
 | 
				
			||||||
        ], result)
 | 
					        ], result)
 | 
				
			||||||
        # Template rendering should use the cache. FIXME: how to make sure of it ? Should we test the cache
 | 
					        # Template rendering should use the cache. FIXME: how to make sure of it ? Should we test the cache
 | 
				
			||||||
        # key<->values ourselves?
 | 
					        # key<->values ourselves?
 | 
				
			||||||
@@ -49,11 +49,11 @@ class OfflineGenerationTestCase(TestCase):
 | 
				
			|||||||
        count, result = CompressCommand().compress()
 | 
					        count, result = CompressCommand().compress()
 | 
				
			||||||
        self.assertEqual(5, count)
 | 
					        self.assertEqual(5, count)
 | 
				
			||||||
        self.assertEqual([
 | 
					        self.assertEqual([
 | 
				
			||||||
            css_tag('/media/CACHE/css/ee62fbfd116a.css')+'\n',
 | 
					            css_tag('/media/CACHE/css/ee62fbfd116a.css'),
 | 
				
			||||||
            u'<script type="text/javascript" src="/media/CACHE/js/0a2bb9a287c0.js"></script>',
 | 
					            u'<script type="text/javascript" src="/media/CACHE/js/0a2bb9a287c0.js"></script>',
 | 
				
			||||||
            u'<script type="text/javascript" src="/media/CACHE/js/fb1736ad48b7.js"></script>',
 | 
					            u'<script type="text/javascript" src="/media/CACHE/js/fb1736ad48b7.js"></script>',
 | 
				
			||||||
            u'<script type="text/javascript" src="/media/CACHE/js/770a7311729e.js"></script>',
 | 
					            u'<script type="text/javascript" src="/media/CACHE/js/770a7311729e.js"></script>',
 | 
				
			||||||
            u'<link rel="stylesheet" href="/media/CACHE/css/73e015f740c6.css" type="text/css" />\n',
 | 
					            u'<link rel="stylesheet" href="/media/CACHE/css/73e015f740c6.css" type="text/css" />',
 | 
				
			||||||
        ], result)
 | 
					        ], result)
 | 
				
			||||||
        # Template rendering should use the cache. FIXME: how to make sure of it ? Should we test the cache
 | 
					        # Template rendering should use the cache. FIXME: how to make sure of it ? Should we test the cache
 | 
				
			||||||
        # key<->values ourselves?
 | 
					        # key<->values ourselves?
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user