2011-10-06 21 views
9

私はちょうど一般的に私がどのような操作がjinja2のかっこで許容されているか不思議だと思います。私がやろうとしていることはそうのような埋め込まれたデータに対して操作を実行です:jinja2の角かっこで囲む

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

これは、トレースバックのエラーがスローされます:私は括弧に「腹筋」を使用しようとすると、同様に

UndefinedError: 'round' is undefined

を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

ありがとう、私はPHPやJavaサーバーのページのように思ってPythonのテンプレートライブラリを使用して飛び込んだ。これは私の質問に答える。 – maxm

+1

"とにかくテンプレートで計算を行うべきではありません。 < - これは悪いアドバイスです。たとえば、複数の列に異なる方法で数値を表示する必要があるデータの表を取り上げます。 – sobri

関連する問題