【问题标题】:How to pass arguments to a subroutine in template toolkit function如何将参数传递给模板工具包函数中的子例程
【发布时间】:2015-03-31 20:25:23
【问题描述】:

我的文档 foo.tt 我想写这样的东西:

[% INCLUDE header('str', 1, 2, 3, 5, 10) %]

我的目标是对 str 进行一些字符串操作,然后用 foreach / for 遍历所有数字。

不幸的是,我无法在模板工具包中发现这种类型的语法是允许的。

将参数传递给子例程的模板工具包方式是什么?

有什么办法吗?

【问题讨论】:

    标签: perl template-toolkit


    【解决方案1】:

    你可以传递参数,但你需要给它们命名。示例:

    外部.tt2:

    [% INCLUDE header.tt2 header_string="str", items=[ 1, 2, 3, 5, 10 ] -%]
    

    header.tt2:

    String: [% header_string %]
    [% FOREACH item IN items -%]
    Item: [% item %]
    [% END -%]
    

    输出:

    String: str
    Item: 1
    Item: 2
    Item: 3
    Item: 5
    Item: 10
    

    【讨论】:

    • [% INCLUDE ... 行末尾的“-”是什么意思?
    • 它指示 TT 将空格切掉:template-toolkit.org/docs/manual/…
    • @ysth,文件需要后缀tt2吗?或者它可以有后缀tt吗?
    【解决方案2】:

    查看MACRO 定义:

    [% MACRO header(str, items) BLOCK -%]
        [% FOREACH i IN items; -%]
     ... your item code here ... 
        [% END -%]
    [% END -%]
    
    [% header('str',[1, 2, 3, 5, 10]) %]
    

    如果 TT 在模板级别公开了原始参数列表,您可以按照您的指示调用它(例如header('str', 1, 2, 3, 5, 10)),但这非常接近。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2017-10-16
      • 1970-01-01
      • 2015-09-07
      相关资源
      最近更新 更多