Подтвердить что ты не робот

Как вы отлаживаете шаблоны Мако?

До сих пор я не мог создать пригодные трассировки, когда шаблоны Мако не были правильно закодированы.

Есть ли способ отлаживать шаблоны, кроме итерации для каждой строки кода?

4b9b3361

Ответ 2

Глядя на источник Flask-Mako, я обнаружил недокументированный параметр конфигурации с именем MAKO_TRANSLATE_EXCEPTIONS.

Установите для этого параметра False в конфигурацию приложения Flask, и вы получите хорошие исключения, пузырящиеся из шаблона. Это делает то же, что предложил @Mariano, без необходимости редактировать источник. По-видимому, этот параметр был добавлен после ответа Мариано.

Ответ 3

Я разбиваю их на куски, а затем собираю куски, когда обнаружил проблему.

Нехорошо, но очень сложно сказать, что пошло не так в большом сложном шаблоне.

Ответ 4

Используя 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

}

Затем вы увидите регулярное исключение python, которое вызвало проблему вместе с номерами строк в шаблоне.

Ответ 5

Сочетание двух верхних ответов с моим собственным специальным соусом:

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" на складе:

  • исключить исключения и
    • при отладке, рендеринг backtrace
    • Если не отладка, снова создайте исключение, чтобы оно было зарегистрировано
  • сделать конфигурацию доступной со страницы (неактуальной)