jinja2 печать в консоль или ведение журнала


Я вроде как новичок в Jinja2 и задаюсь вопросом, есть ли способ сделать шаблоны, будучи сгенерированными, чтобы распечатать на консоль или перенаправить некоторые выходные данные в какой-то поток?

Поскольку шаблоны Jinja2 могут иметь логику внутри, я думаю, что иногда было бы полезно ввести некоторую информацию в какой-то лог-файл или, по крайней мере, распечатать на консоли.

Возможно ли это, или я просто говорю чушь?

2 9

2 ответа:

Я думаю, что вы можете достичь этого с помощью фильтров (http://jinja.pocoo.org/docs/api/#custom-filters ) или расширения (http://jinja.pocoo.org/docs/extensions/#adding-extensions ). идея состоит в том, чтобы просто распечатать фильтр или расширение прямо в консоль.

Не тестируется, но фильтр должен быть примерно таким:

def debug(text):
  print text
  return ''

environment.filters['debug']=debug

Использовать как:

...<p>Hello world!</p> {{"debug text!"|debug}}...

Не забудьте удалить отладку в производственном коде!

Аналогичный, но немного отличающийся подход с использованием контекстного процессора:

В python / flask:

@app.context_processor
def utility_functions():
    def print_in_console(message):
        print str(message)

    return dict(mdebug=print_in_console)

В jinja2 используйте его в любом месте следующим образом:

{{ mdebug("any text or variable") }}