Question

Jusqu'à présent, je l'ai trouvé impossible de produire tracebacks utilisables lorsque les modèles Mako ne sont pas codés correctement.

est-il un moyen de modèles de débogage en plus itérer pour chaque ligne de code?

Était-ce utile?

La solution

Mako fournit en fait un très belle façon de traquer les erreurs dans un modèle :

from mako import exceptions

try:
    template = lookup.get_template(uri)
    print template.render()
except:
    print exceptions.html_error_template().render()

Autres conseils

Je les décomposer en morceaux, puis rassembler les morceaux quand je l'ai trouvé le problème.

Pas bon, mais il est vraiment difficile de dire ce qui a mal tourné dans un grand modèle complexe.

Utilisation flask_mako, je trouve qu'il est plus facile de sauter sur la génération de TemplateError et juste laisser passer l'exception. C'est à dire. en flask_mako.py, commentez la partie qui fait la TemplateError et juste faire une augmentation:

def _render(template, context, app):
 """Renders the template and fires the signal"""
app.update_template_context(context)
try:
    rv = template.render(**context)
    template_rendered.send(app, template=template, context=context)
    return rv
except:
    #translated = TemplateError(template)                                                                                                                 
    #raise translated                                                                                                                                     
    raise

}

Ensuite, vous verrez une exception python régulière qui a causé le problème ainsi que les numéros de ligne dans le modèle.

En combinant les deux premières réponses avec ma propre sauce spéciale:

from flask.ext.mako import render_template as render_template_1
from mako import exceptions

app.config['MAKO_TRANSLATE_EXCEPTIONS'] = False    # seems to be necessary

def render_template(*args, **kwargs):
    kwargs2 = dict(**kwargs)
    kwargs2['config'] = app.config     # this is irrelevant, but useful
    try:
        return render_template_1(*args, **kwargs2)
    except:
        if app.config.get('DEBUG'):
            return exceptions.html_error_template().render()
        raise

Il enveloppe le stock fonction "render_template":

  • exceptions de capture et
    • si le débogage, rendre un backtrace
    • sinon le débogage, soulever l'exception encore une fois il sera connecté
  • make config accessible depuis la page (sans objet)
scroll top