如何在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
相关产品推荐
相关产品推荐

