次のTTコマンドを検討してください(順番に実行)。
[% x = "foo" %] # x == "foo"
[% x = "bar" IF 1 %] # x == "bar"
[% x = "bar" IF 0 %] # x == ""
x
3番目のステートメントで空の文字列に割り当てられるのはなぜですか?
次のTTコマンドを検討してください(順番に実行)。
[% x = "foo" %] # x == "foo"
[% x = "bar" IF 1 %] # x == "bar"
[% x = "bar" IF 0 %] # x == ""
x
3番目のステートメントで空の文字列に割り当てられるのはなぜですか?
http://template-toolkit.org/docs/manual/Syntax.html#section_Capturing_Block_Output
この構文を副作用表記法と組み合わせて使用する場合の重要な注意点に注意してください。次のディレクティブは、期待どおりに動作しません。
[% var = 'value' IF some_condition %] # does not work
この場合、ディレクティブは次のように解釈されます (わかりやすくするためにスペースが追加されています)。
[% var = IF some_condition %]
value
[% END %]
それよりも
[% IF some_condition %]
[% var = 'value' %]
[% END %]
変数には、真の場合は「値」を返しますが、偽の場合は何も返さない IF ブロックの出力が割り当てられます。つまり、次のディレクティブは常に「var」をクリアします。
[% var = 'value' IF 0 %]
期待される動作を実現するには、ディレクティブを次のように記述する必要があります。
[% SET var = 'value' IF some_condition %]