2011-10-06 45 views
9

我想通常我很好奇jinja2括號中的操作是允許的,例如,我想要做的是嵌入式數據像這樣進行操作:jinja2括號內的舍入

{{ round(255*(mileage['chevy'] - mileage['ford']))/1000 }} 

這引發錯誤的回溯:

UndefinedError: 'round' is undefined

同樣,當我嘗試在括號內用「ABS」 jinja塊,我得到一個未定義的錯誤 - 即使它們都是標準的lib函數。有沒有辦法在模板呈現期間執行此操作,而不是在傳遞數據之前?

+0

一般而言,您想在程序代碼中進行計算,而不是在模板中進行計算。我不確定你認爲Jinja2的括號是做什麼的,但是他們沒有做的是允許你在你的模板中嵌入python代碼。 – geoffspear

回答

24

jinja2模板語言不同於python語言。在jinja2中,值的操作通常在過濾器中完成:{{ something | operation }}。您可以在jinja2文檔中找到list of filters

例如,round,你可以這樣做:

{{ 42.55|round }} 

這將顯示 「42」 的網頁上。一個abs過濾器以相同的方式存在。

請注意,這些過濾器只能用於在顯示之前更改值,並且可用於計算。無論如何,計算不應該在模板中完成。

+1

+1。只是爲了補充一點,可用的對象和函數是通過[context](http://jinja.pocoo.org/docs/api/#the-context)注入的,默認情況下它只包含一些特殊項目。 – Cameron

+0

謝謝,我跳入使用python模板庫,認爲它就像PHP或Java服務器頁面。這回答了我的問題。 – maxm

+1

「計算不應該在模板中完成。」 < - 這是不好的建議。以數據表爲例,其中數字需要以不同的方式顯示在多列中。 – sobri