You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Template Toolkit中使用空格缩进且不输出多余空格?

Template Toolkit(TT2)消除缩进输出的方法

在TT2中,代码里的缩进空格会被输出,主要是因为指令前后的空白没有被正确处理,以下是几种解决方法:

方法1:将指令移至行首并使用-%]结尾

你已经在指令末尾用了-%](它会吃掉指令后的换行和空白),但当前代码中指令前的缩进空格仍会被输出。只需把[%移到行首,即可避免这些缩进被输出:

[% FOREACH md IN data.keys.sort -%]
[% FOREACH timeplate IN data.$md.keys.sort -%]
[% IF (timeplate == 'timeplate') -%]
[% FOREACH tp IN data.$md.$timeplate.keys.sort -%]
[% FOREACH proc IN data.$md.$timeplate.$tp.procedure -%]
[% procedure.$proc = tp -%]
[% END -%]
[% END -%]
[% END -%]
[% END -%]
[% END -%]

方法2:使用[%~开头吃掉前置空白

如果不想调整代码的缩进排版,可以在指令开头用[%~(它会吃掉指令前的所有空白,包括缩进和换行),配合你已用的-%],就能完全消除这些缩进的输出:

[%~ FOREACH md IN data.keys.sort -%]
       [%~ FOREACH timeplate IN data.$md.keys.sort -%]
       [%~ IF (timeplate == 'timeplate') -%]
       [%~ FOREACH tp IN data.$md.$timeplate.keys.sort -%]
       [%~ FOREACH proc IN data.$md.$timeplate.$tp.procedure -%]
       [%~ procedure.$proc = tp -%]
       [%~ END -%]
       [%~ END -%]
       [%~ END -%]
       [%~ END -%]
       [%~ END -%]

方法3:全局设置空白处理规则

在模板开头添加全局配置,开启PRE_CHOMP和POST_CHOMP,会自动处理所有指令前后的空白:

[% PRE_CHOMP = 1 %]
[% POST_CHOMP = 1 %]

# 后续你的循环代码...
       [% FOREACH md IN data.keys.sort -%]
       ...
       [% END -%]
  • PRE_CHOMP = 1:吃掉每个指令前面的所有空白(包括缩进、换行)
  • POST_CHOMP = 1:吃掉每个指令后面的所有空白(包括换行)

这种方式会影响整个模板的空白输出,适合需要统一处理的场景。

内容的提问来源于stack exchange,提问作者varun kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:46:10