41 votes

Comment déboguez-vous les modèles Mako?

Jusqu'à présent, il m'a été impossible de produire des traces utilisables lorsque les modèles Mako ne sont pas codés correctement.

Existe-t-il un moyen de déboguer des modèles en plus de l'itération pour chaque ligne de code?

45voto

Triptych Points 70247

Mako fournit en réalité un très bon moyen de localiser 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()
 

4voto

ford Points 1891

En regardant la source Flask-Mako , j'ai trouvé un paramètre de configuration non documenté appelé MAKO_TRANSLATE_EXCEPTIONS .

Définissez ceci sur False dans la configuration de votre application Flask et vous obtiendrez de belles exceptions qui jailliraient du modèle. Ceci accomplit la même chose que celle suggérée par @Mariano, sans avoir besoin de modifier le source. Apparemment, ce paramètre a été ajouté après la réponse de Mariano.

1voto

S.Lott Points 207588

Je les décompose en morceaux, puis je les réassemble quand j'ai trouvé le problème.

Pas bien, mais il est très difficile de dire ce qui ne va pas dans un modèle complexe et volumineux.

0voto

Mariano Alvira Points 196

Avec flask_mako, je trouve qu'il est plus facile de passer outre la génération TemplateError et de ne transmettre que l'exception. C'est-à-dire dans flask_mako.py, commentez la partie qui fabrique le TemplateError et faites juste 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 normale qui a causé le problème, ainsi que les numéros de ligne dans le modèle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X