如何在没有更改视图默认目录的情况下从不在'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;
答案 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开发团队的成员)