【问题标题】:Template Toolkit include hook?模板工具包包括钩子?
【发布时间】:2012-07-03 17:16:50
【问题描述】:

当我包含一个模板并且我可以在其中更改模板的路径时,是否会执行某种类型的挂钩?

例如

[% INCLUDE test %]

我想将“test”的路径更改为“AE/test.tt”或“FR/test.tt”。


想法是改变模板的路径而不改变包含所在的模板。

【问题讨论】:

    标签: perl hook template-toolkit


    【解决方案1】:

    执行此操作的正常方法是在构造 Template 对象时使用 INCLUDE_PATH 参数:

    my $tt = Template->new({INCLUDE_PATH => 'AE'});
    

    构建一个新的 Template 实例没什么大不了的,所以当您要处理模板时,没有充分的理由不即时创建一个新实例,但是,如果您在持久化环境和真正需要性能,总是可以选择创建多个:

    my %tt;
    $tt{ae} = Template->new({INCLUDE_PATH => 'AE'});
    $tt{fr} = Template->new({INCLUDE_PATH => 'FR'});
    # ... code ... code ... code ...
    $lang = 'ae';
    # ... code ... code ... code ...
    $tt{$lang}->process($template_name);
    

    【讨论】:

    • 10x 这可能会起作用,因为我可以将一个子传递给 INCLUDE_PATH(我正在使用 Dancer,并且我使用内置模板引擎处理)。据我所知,没有任何类型的钩子可以让我更改模板名称或任何类型的内置别名功能(例如,传递哈希的地方和 INCLUDE 使用将模板名称作为键传递,值作为模板的真实路径),对吗?
    • 我不知道有任何钩子或别名功能,没有。
    【解决方案2】:

    我认为这是可能的 Template 示例:

    [% mytest = 'AE/test.tt' %]
    [% INCLUDE  $mytest  %]           # 'AE/test.tt'
    

    这里没有测试。

    见http://template-toolkit.org/docs/manual/Directives.html#section_INCLUDE

    【讨论】:

    • 思路是动态改变模板的路径
    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2012-07-22
    • 2014-09-26
    • 1970-01-01
    • 2013-08-27
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多