문제

지금까지 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"함수를 랩핑합니다.

  • 예외를 포착하고
    • 디버깅이 있으면 뒤쪽으로 렌더링하십시오
    • 디버깅하지 않으면 예외를 다시 제기하여 기록됩니다.
  • 페이지에서 액세스 할 수있는 구성 (관련이 없음)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top