CHANGES.txt | ●●●●● patch | view | raw | blame | history | |
pyramid/chameleon_zpt.py | ●●●●● patch | view | raw | blame | history | |
pyramid/tests/test_chameleon_zpt.py | ●●●●● patch | view | raw | blame | history |
CHANGES.txt
@@ -1,3 +1,13 @@ Next release ============ - When the ``pyramid.reload_templates`` setting was true, and a Chameleon template was reloaded, and the renderer specification named a macro (e.g. ``foo#macroname.pt``), renderings of the template after the template was reloaded due to a file change would produce the entire template body instead of just a rendering of the macro. See https://github.com/Pylons/pyramid/issues/1013. 1.4.4 (2013-08-27) ================== @@ -16,7 +26,7 @@ --------- - ``pyramid.testing.DummyResource`` didn't define ``__bool__``, so code under Python 3 would use ``__len__`` to find truthiness; this usually caused an Python 3 would use ``__len__`` to find truthiness; this usually caused an instance of DummyResource to be "falsy" instead of "truthy". See https://github.com/Pylons/pyramid/pull/1032 pyramid/chameleon_zpt.py
@@ -1,13 +1,22 @@ from zope.interface import implementer from chameleon.zpt.template import PageTemplateFile from pyramid.interfaces import ITemplateRenderer from pyramid.decorator import reify from pyramid import renderers from chameleon.zpt.template import PageTemplateFile def renderer_factory(info): return renderers.template_renderer_factory(info, ZPTTemplateRenderer) class PyramidPageTemplateFile(PageTemplateFile): def cook(self, body): PageTemplateFile.cook(self, body) if self.macro: # render only the portion of the template included in a # define-macro named the value of self.macro macro_renderer = self.macros[self.macro].include self._render = macro_renderer @implementer(ITemplateRenderer) class ZPTTemplateRenderer(object): @@ -18,17 +27,13 @@ @reify # avoid looking up reload_templates before manager pushed def template(self): tf = PageTemplateFile( tf = PyramidPageTemplateFile( self.path, auto_reload=self.lookup.auto_reload, debug=self.lookup.debug, translate=self.lookup.translate translate=self.lookup.translate, macro=self.macro, ) if self.macro: # render only the portion of the template included in a # define-macro named the value of self.macro macro_renderer = tf.macros[self.macro].include tf._render = macro_renderer return tf def implementation(self): pyramid/tests/test_chameleon_zpt.py
@@ -140,6 +140,18 @@ self.assertEqual(result, '<html>\nOutside macro\n\n Hello!\n\n</html>\n\n') def test_macro_template_reload(self): minimal = self._getTemplatePath('withmacro.pt') lookup = DummyLookup() instance = self._makeOne(minimal, lookup, macro='foo') result = instance.implementation()() self.assertEqual(result, '\n Hello!\n') instance.template.cook( '<html>\nOutside macro\n\n Hello!\n\n</html>\n\n' ) result = instance.implementation()() self.assertEqual(result, '\n Hello!\n') class DummyLookup(object): auto_reload=True debug = True