加载模板的舞者插件

时间:2011-09-08 07:12:12

标签: perl plugins dancer

如何在没有更改视图默认目录的情况下从不在'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;

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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

(披露:我是Dancer开发团队的成员)