Mercurial > piecrust2
diff piecrust/templating/jinjaengine.py @ 524:4bca25f99463
serve: Improve Jinja rendering error reporting.
Some errors in Jinja are not wrapped in `TemplateSyntaxError` exceptions, so
we have to wrap them ourselves to at least say what file it happened in.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 28 Jul 2015 21:25:08 -0700 |
parents | 6ca1b6fb9964 |
children | cf3218766fe2 |
line wrap: on
line diff
--- a/piecrust/templating/jinjaengine.py Tue Jul 28 21:24:10 2015 -0700 +++ b/piecrust/templating/jinjaengine.py Tue Jul 28 21:25:08 2015 -0700 @@ -53,14 +53,20 @@ return tpl.render(data) except TemplateSyntaxError as tse: raise self._getTemplatingError(tse) + except Exception as ex: + msg = "Error rendering Jinja markup" + rel_path = os.path.relpath(path, self.app.root_dir) + raise TemplatingError(msg, rel_path) from ex def renderFile(self, paths, data): self._ensureLoaded() tpl = None logger.debug("Looking for template: %s" % paths) + rendered_path = None for p in paths: try: tpl = self.env.get_template(p) + rendered_path = p break except TemplateSyntaxError as tse: raise self._getTemplatingError(tse) @@ -74,6 +80,10 @@ return tpl.render(data) except TemplateSyntaxError as tse: raise self._getTemplatingError(tse) + except Exception as ex: + msg = "Error rendering Jinja markup" + rel_path = os.path.relpath(rendered_path, self.app.root_dir) + raise TemplatingError(msg, rel_path) from ex def _getTemplatingError(self, tse, filename=None): filename = tse.filename or filename