2013-02-09 4 views
6

私はJinja2の新機能を使用しています。生成中にテンプレートを作成してコンソールに出力したり、出力を何らかのストリームにリダイレクトしたりする方法があるのでしょうか?jinja2コンソールまたはロギングに印刷

Jinja2のテンプレートはロジックが内部にあるかもしれないので、ある種のログファイルに何らかの情報を記録したり、少なくともコンソールに出力するのが便利なことがあると思います。

これは可能ですか、それとも私はゴミを言っていますか?

答えて

7

私はフィルタ(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}}... 

生産コードにデバッグを削除することを忘れないでください!コンテキストプロセッサを使用して

+0

をああ涼しいです!私はそれを達成するための何らかの方法があるはずであることを知っていた。今、私はこれに問題があります。リテラル文字列をカスタムフィルタに送ることはできません。{%set text = "debug text!" %}タグ、{{text |デバッグ}}。リテラル文字列がフィルタに送られるかどうかわかりません:-o –

+0

私は必要な文字列をすべて囲むために '()'を使って、部分的に解決しました印刷します。たとえば、{{( "debug text!")|デバッグ}}。より正確に言えば、{{( "debug text!value:"〜valueINeedToLog)|デバッグ}} –

2

似ていますが、わずかに異なるアプローチ:

パイソン/フラスコの中で:Jinja2ので

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

    return dict(mdebug=print_in_console) 

、次のようにどこにでもそれを使用します。

{{ mdebug("any text or variable") }} 
関連する問題