마코 템플릿을 어떻게 디버그합니까?
문제
지금까지 Mako 템플릿이 올바르게 코딩되지 않을 때 사용 가능한 추적을 생성하는 것이 불가능하다는 것을 알았습니다.
모든 코드 라인에 대한 반복 외에 템플릿을 디버그하는 방법이 있습니까?
해결책
Mako는 실제로 a 템플릿에서 오류를 추적하는 아주 좋은 방법:
from mako import exceptions
try:
template = lookup.get_template(uri)
print template.render()
except:
print exceptions.html_error_template().render()
다른 팁
보고 플라스크 마코 소스, 문서화되지 않은 구성 매개 변수를 찾았습니다 MAKO_TRANSLATE_EXCEPTIONS
.
이것을 설정하십시오 False
플라스크 앱 구성에서는 템플릿에서 새로운 예외가 발생할 수 있습니다. 이것은 소스를 편집 할 필요없이 @mariano가 제안한 것과 같은 것을 달성합니다. 분명히이 매개 변수는 Mariano의 답변 후에 추가되었습니다.
나는 그것들을 조각으로 분해 한 다음 문제를 발견했을 때 조각을 다시 조립합니다.
좋지는 않지만 크고 복잡한 템플릿에서 무엇이 잘못되었는지 말하기는 정말 어렵습니다.
flask_mako를 사용하면 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
}
그런 다음 템플릿의 줄 번호와 함께 문제를 일으킨 일반 파이썬 예외가 표시됩니다.
두 개의 상위 답변을 나만의 특별한 소스와 결합합니다.
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
스톡 "render_template"함수를 랩핑합니다.
- 예외를 포착하고
- 디버깅이 있으면 뒤쪽으로 렌더링하십시오
- 디버깅하지 않으면 예외를 다시 제기하여 기록됩니다.
- 페이지에서 액세스 할 수있는 구성 (관련이 없음)
제휴하지 않습니다 StackOverflow