我想在一个独立的脚本中使用Mojolicious渲染引擎渲染.html.ep模板,该脚本发送电子邮件并从cron运行:
#!/usr/bin/perl
use feature ':5.10';
use Mojo::Base -strict;
use Mojolicious::Renderer;
use Data::Dumper;
my $renderer = Mojolicious::Renderer->new();
push @{$renderer->paths}, '/app/templates';
my $template = $renderer->get_data_template({
    template => 'template_name',
    format => 'html',
    handler => 'ep'
});
print Dumper($template) . "\n";
Run Code Online (Sandbox Code Playgroud)
但是,$template始终未定义.
模板文件是/app/templates/template_name.html.ep.
我究竟做错了什么?
sim*_*que 10
您正在使用get_data_templateMojo :: Renderer,它用于从__DATA__当前源代码文件的部分加载模板.
事实上,使用Mojo :: Renderer是错误的.您想要Mojo :: Template,独立模板引擎作为模块.
use Mojo::Template;
my $mt = Mojo::Template->new( vars => 1 );
my $email_body = $mt->render_file( 'test.html.ep', { one => 1, two => 2 } );
say $email_body;
Run Code Online (Sandbox Code Playgroud)
使用test.html.ep:
The magic numbers are <%= $one %> and <%= $two %>.
Run Code Online (Sandbox Code Playgroud)
输出:
The magic numbers are 1 and 2.
Run Code Online (Sandbox Code Playgroud)
该选项vars很重要,因此它接受命名变量而不是参数列表.