Jinja2 print для консоли или ведения журнала

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

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

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

Ответ 1

Я думаю, вы можете добиться этого, используя фильтры (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}}...

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

Ответ 2

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

В python/колбе:

@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") }}

Ответ 3

Я хотел бы иметь HTML-элемент с установленным идентификатором и атрибут скрытого для элемента. Тогда используйте JavaScript как таковой

<p id="hidden-p">{{a_variable}}</p>
<script>
    var hiddenP = document.getElementById("hidden-p").innerHTML;
    console.log(hiddenP);
</script>