2011-09-08 30 views
2

如何在不改變視圖默認目錄的情況下從不在「app/views」目錄中的Dancer :: Plugin加載模板?加載模板的舞者插件

這不是工作/它添加默認視圖文件路徑路徑/:

package Dancer::Plugin::MyPlugin; 
use Dancer ':syntax'; 
use Dancer::Plugin; 

any '/test' => sub { 
    template '/path_to_template/test.tt' => { 
    }; 
}; 

register_plugin; 

1; 

回答

4

你可以稱之爲engine獲得Dancer::Template對象,並調用其render方法,例如:

my $template_engine = engine 'template'; 
my $content = $template_engine->render('/path/to/template.tt', { 'name' => 'value' }); 

然後,返回的默認佈局呈現的內容,請致電apply_layout

return $template_engine->apply_layout($content); 
3

目前,我認爲你需要的模板調用之前設置views設置,然後改變它回來後,例如:

my $views_dir = setting('views');  # remember current setting 
setting 'views' => '/some/other/path'; # temporarily use our desired path 
my $content = template 'test', $params; # render the view 
setting 'views' => $views_dir;   # restore previous setting 
return $content; 

然而,這是醜陋的。

我認爲這將是有意義的template關鍵字接受system_path選項,就像send_file做,所以你可以說,例如:

template '/path/to/view.tt', $params, { system_path => 1 }; 

我已經提出了這個問題,並會看在得到它實現的下一個版本:https://github.com/sukria/Dancer/issues/645

(披露:我是舞者開發團隊的一部分)

+0

10Q所付出的努力! ^^我認爲我有一個更好的主意:每個插件都可以擁有自己的'views'目錄和'public'目錄,就像一個實際的應用程序,你不覺得嗎? – bliof