2011-09-08 50 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