4

カスタムフィルターを使用してjinja2からPython関数を呼び出すことができましたが、1つ以上のパラメーターを使用して関数を呼び出すことしかできないようです。以下では、ctestを変数ではなく関数として扱うために、ジャンクパラメーターを渡す必要がありました。

また、電話をかけるだけでは機能しません{{ ctest() }}

これを強制的に関数呼び出しにする別の方法はありますか、それとも別のアプローチを使用する必要がありますか?

コード:

def ctest(stuff):
    return "yeah!"

template_env = jinja2.Environment (loader = jinja2.FileSystemLoader(template_file_root))
#custom filters
template_env.filters['ctest'] = ctest

レンプレート:

Working? {{ junk|ctest }}

出力:

working? yeah!
4

3 に答える 3

1

コメントを答えに要約する:

(Woobleが指摘したように)私は何もフィルターにかけようとはしていないので、フィルターに関数を追加して関数を呼び出す機能は、これを行う正しい方法ではありません。

代わりに、関数をtemplate_env.globalsに追加する必要があります。

template_globals.filters['ctest'] = ctest
于 2012-10-29T22:22:39.957 に答える
0

ええと、彼らはフィルターなので、何かをフィルターすることを期待しています。引数を渡さずにテンプレートの外部から呼び出し可能に機能させたいという動機がある場合は、署名を次のように変更します。

def ctest(*args):

そして、引数を無視します。引数が渡されなかった場合、または引数がいくつでも渡された場合に機能します。

于 2012-07-25T19:34:53.027 に答える
0

{{func()}}出力をレンダリングします。 パラメータを使用して{% call func() %}{%endcall%}呼び出します。func()caller

jinjaでは、テンプレートまたは他のテンプレートの副作用をレンダリングせずに、テンプレートでPython関数を呼び出す簡単な方法は実際にはないようです。私が思いついた回避策は次のとおりです。

{% if func() %}{% endif %}
于 2013-03-26T13:20:15.500 に答える