1

次のTTコマンドを検討してください(順番に実行)。

[% x = "foo" %]        # x == "foo" 
[% x = "bar" IF 1 %]   # x == "bar"
[% x = "bar" IF 0 %]   # x == ""

x3番目のステートメントで空の文字列に割り当てられるのはなぜですか?

4

1 に答える 1

8

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 %]
于 2012-04-20T09:46:12.550 に答える