2016-12-25 5 views
0

でより深い評価を取得し、次のように:私は神社命令を含む文字列をresturns神社ためのPythonの関数を、持っている神社

def test(): 
    # stuff ... 
    return "The value of x is {{x}}" 

私は神社のグローバルな文脈の中にこの機能を設定して、今私が使用したいですそれは:

{% set x = 3 %} 
{{ test() }} 

残念ながら、 "テスト" の戻り値が評価されていないので、結果は次のとおりです。

The value of x is {{x}} 

testの結果をどういうわけか強制的に評価できますか?

答えて

1

jinja2 macroを使用する方がよいでしょう。この場合、あなたはおそらくマクロにxを渡す:私はマクロにxを渡されました

{% macro test(x) -%} 
The value of x is {{x}} 
{%- endmacro %} 

{% set x = 3 %} 
{{ test(x) }} 

注 - そこは本当にxを通過しないように十分な理由ではありません、それは物事がより明確になります。さらに、グローバル変数を暗黙的に渡す方法もわかりません;-)。 (私は明快さを減少し、何かをめちゃくちゃ危険性を増加するためお勧めしません)


代替戦略は、コールバック関数内でテンプレートをレンダリングするために、次のようになります。ここでは

from jinja2 import Template 
def test(x): 
    return Template('The value of x is {{x}}').render(x=x) 

私は」まだxをテンプレートのコンテキストに渡しました。 AFAIKでは、関数内のグローバルコンテキストをテンプレートが取得する方法はありません(実際には非常に混乱しているコードにつながります)。 test関数内でテンプレートをレンダリングする場合は、autoescape=Trueを使用している場合、誤ってコンテンツを2回エスケープしないように注意する必要があります。

関連する問題