2013-05-29 61 views
0

從我的理解,Template::Alloy::TT應該可以與Template Toolkit互換,但我有一些問題試圖與另一個互換。下面是我的視圖文件的配置:perl模板::合金與催化劑不能正常顯示

package maypp::View::HTML; 
use strict; 
use base 'Catalyst::View::TT'; 

__PACKAGE__->config({ 
    INCLUDE_PATH => [ 
     myapp->path_to('root', 'src'), 
     myapp->path_to('root', 'lib'), 
    ], 
    PRE_PROCESS => 'config/main', 
    WRAPPER  => 'site/wrapper', 
    ERROR  => 'error.html', 
    TIMER  => 0, 
    render_die => 1, 
    COMPILE_DIR => '/tmp/compiled_templates', #caches compiled templates 
    STAT_TTL => 1, #how long to cache templates before seeing if there are any changes 
    TEMPLATE_EXTENSION => '.html', 
}); 

我認爲改變Catalyst::View::TTCatalyst::View::TT::Alloy將所有我不得不這樣做(這之前一直是過程對我來說)開始使用Template::Alloy。然而,每當我改變這一點,我沒有得到正確的輸出。下面是我的包裝文件:

[% IF template.name.match('\.(css|js|txt)'); 
    debug("Passing page through as text: $template.name"); 
    content; 
    ELSE; 
     debug("Applying HTML page layout wrappers to $template.name\n"); 
     content WRAPPER "$host/site/html" + "$host/site/layout"; 
    END; 
-%] 

site/html將被處理,但site/layout不進入site/html像它的時候我只是用普通Template Toolkit(通常site/layout進入[% content %]site/html)。有什麼我在這裏做錯了嗎?我想使用Template::Alloy來提高速度,但只有在我能使其工作的情況下:)感謝您的幫助!

回答

0

只要在黑暗中刺傷,我會說TT :: Alloy可能不支持多個WRAPPER +指令。在TT發展的不少年裏,我從來沒有使用過它,但這並不是說它在某個地方不受歡迎。我的經驗是,應用程序可能會根據上下文在包裝器A和包裝器B之間切換,但將包裝器B包裝在A中?沒那麼多。

如果你總是需要這樣做,爲什麼不把第二個WRAPPER指令內$host/site/html.tt

+0

有趣的是'內容WRAPPER /網站/ html +網站/佈局;'工作正常,但是我需要'$主機'根據域顯示不同的模板。通過在'$ host/site/html.tt'中放置第二個'WRAPPER'指令,你的意思是讓'[%content WRAPPER'$ host/site/layout「%]'代替'[%content% ]「就像我現在擁有? – srchulo

+0

那麼在這種情況下,這可能是'$ host'的插值問題?嘗試'host_'/ site/html'',看看是否有任何區別。 – RET

+0

我試過了,但是它給了我這個錯誤:'文件錯誤 - /站點/佈局絕對路徑不允許(設置ABSOLUTE選項)' – srchulo