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

2 回答 2

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);
于 2011-09-08T10:37:06.827 回答
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 开发团队的一员)

于 2011-09-08T10:14:23.563 回答