Wow, thanks Miguel! I sure have been stumped on Mako errors before, this will really help.
Pascal On Wed, Jun 11, 2014 at 5:51 AM, Miguel Colom <[email protected]> wrote: > Dear all, > since now, when it raised an exception during a Mako template rendering, > CherryPy showed a traceback which in fact is not really informative. Most > of the time, it shows just the name of the exception (nameError), but not > which variable caused the problem or which file. > > I've modified base_app.py in order to use the RichTraceback() object from > Mako. Now, when a unhandled template exception occurs, a different error > page is shown, telling which file, line and contents of the line caused the > failure. > > For example: > File /home/miguel/ipolLocal/demo/app/81/template/archive_index.html, line > 5, in render_body > ${nbpublic} public archives out of ${nbtotal} online experiments with > > In the example we can see that it was line #5 of file archive_index.html > which caused the problem, involving the ${nbpublic} and ${nbtotal} > variables. > > You can checkout the new code from git (best option), or change your > tmpl_out(.) function by this one: > def tmpl_out(self, tmpl_fname, **kwargs): > """ > templating shortcut, populated with the default app attributes > """ > # pass the app object > kwargs['app'] = self > # production flag > kwargs['prod'] = (cherrypy.config['server.environment'] > == 'production') > > tmpl = self.tmpl_lookup.get_template(tmpl_fname) > > # Render the template > # If an exception occurs, render an error page showing the > traceback > try: > return tmpl.render(**kwargs) > except: > traceback_string = "<h1>IPOL template rendering error</h1>" > traceback_string += "<h2>Template: %s</h2>" % tmpl_fname > traceback_string += "<h2>kwargs: %s</h2>" % kwargs > traceback = RichTraceback() > for (filename, lineno, function, line) in traceback.traceback: > traceback_string += \ > "File <b>%s</b>, line <b>%d</b>, in <b>%s</b><br>" % \ > (filename, lineno, function) > traceback_string += line + "<br><br>" > traceback_string += "%s: %s" % \ > (str(traceback.error.__class__.__name__), \ > traceback.error) + "<br>" > return traceback_string > > (also add "from mako.exceptions import RichTraceback" before "from . > import http"). > > Best, > Miguel > > > -- > IPOL - Image Processing On Line - http://ipol.im/ > > contact [email protected] - http://www.ipol.im/meta/contact/ > news+feeds twitter @IPOL_journal - http://www.ipol.im/meta/feeds/ > announces [email protected] - http://tools.ipol.im/mm/announce/ > discussions [email protected] - http://tools.ipol.im/mm/discuss/ > -- Pascal Getreuer CMLA, ENS Cachan [email protected] www.getreuer.info
-- IPOL - Image Processing On Line - http://ipol.im/ contact [email protected] - http://www.ipol.im/meta/contact/ news+feeds twitter @IPOL_journal - http://www.ipol.im/meta/feeds/ announces [email protected] - http://tools.ipol.im/mm/announce/ discussions [email protected] - http://tools.ipol.im/mm/discuss/
