これまでのところ、Mako テンプレートが正しくコーディングされていない場合、使用可能なトレースバックを生成することは不可能であることがわかりました。
コードのすべての行を繰り返す以外に、テンプレートをデバッグする方法はありますか?
Makoは、実際には、テンプレートのエラーを追跡するための非常に優れた方法を提供します。
from mako import exceptions
try:
template = lookup.get_template(uri)
print template.render()
except:
print exceptions.html_error_template().render()
Flask-Makoのソースを見ると、文書化されていない という構成パラメーターが見つかりましたMAKO_TRANSLATE_EXCEPTIONS
。
これをFalse
Flask アプリ構成で に設定すると、テンプレートから素晴らしい例外が発生します。これは、ソースを編集する必要なく、@Mariano が提案したのと同じことを達成します。どうやら、このパラメーターはマリアーノの回答の後に追加されたようです。
それらをバラバラに分解し、問題が見つかったら再び組み立てます。
よくありませんが、大きくて複雑なテンプレートで何が問題だったのかを判断するのは非常に困難です。
フラスコマコを使用すると、TemplateErrorの生成をスキップして、例外を渡す方が簡単だと思います。つまり、flask_mako.pyで、TemplateErrorを作成する部分をコメントアウトし、レイズを実行します。
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
}
次に、テンプレートの行番号とともに問題を引き起こした通常のPython例外が表示されます。