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?
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?
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()
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.
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 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.