簡體   English   中英

如何在Catalyst應用程序的Template Tookit模板中定義常量?

[英]How can I define constants in a Template Tookit template in a Catalyst app?

我想在TT模板中使用常量。 HTML :: Mason (我之前選擇的模板引擎)中,我可以做:

<%once>
use MyApp::Constants qw(CONSTANT);
</%once>

如何在Template Toolkit中執行此操作? 如標題中所述,這是Catalyst應用程序,因此我認為我可以將常量放入存儲庫中,但這似乎有點尷尬。

- 編輯

抱歉-我應該提到我想使用自己的常量-從MyApp :: Constants導出,沒有重復。

在TT配置中,您可以使用VARIABLES選項傳遞一個值列表,該值將在處理每個模板時傳遞給每個模板。 使用一些符號表技巧,您可以將所有常量都吸收到配置中:

use MyApp::Constants;
use Template;


my $tt;     # template object
{ 
    no strict 'refs';
    $tt = Template->new( { 
        VARIABLES => { map { $_ => &{ 'MyApp::Constants::' . $_ } } 
                       grep { defined &{ 'MyApp::Constants::' . $_ } }
                       keys %MyApp::Constants::
                     }
        }
    )
}

這將檢查包MyApp::Constants中的所有符號,檢查是否將它們定義為子例程(這是constant.pm在后台執行的操作),然后使用map將它們的hashref提供給TT。

幾種可能性。 只需定義一些變量:

[% users = {
     tom   => 'Thomas',
     dick  => 'Richard',
     larry => 'Lawrence',
   }
%]

[% FOREACH u IN users %]
   * [% u.key %] : [% u.value %]
[% END %]

使用全局變量:

[% global.version=1.234 %]

This is Version [% global.version %].

META指令允許在模板中定義簡單的元數據項。 這些是在解析模板時評估的,因此只能包含簡單值(例如,無法將其他變量值內插到META變量中)。

[% META
   title   = 'The Cat in the Hat'
   author  = 'Dr. Seuss'
   version = 1.23 
%]

正如您在問題正文中已經提到的,還有以下內容: http : //template-toolkit.org/docs/manual/Variables.html#section_Compile_Time_Constant_Folding

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM