2013-02-09 91 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 – 2013-02-09 02:41:35

+0

好吧,部分地解決它(或者應該是這樣)使用'()'將我需要的所有字符串打印。例如{{(「debug text!」)|調試}}。或者更確切地說:{{(「debug text!value:」〜valueINeedToLog)|調試}} – 2013-02-09 03:08:32

2

相似但略有不同的方法使用背景處理器:

在蟒蛇/瓶:

@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") }} 
相關問題