2017-02-08 31 views
4

我想用Mojolicious渲染引擎中发送电子邮件,并从cron运行一个独立的脚本来渲染.html.ep模板:如何在独立Perl脚本中使用Mojolicious渲染?

#!/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"; 

但是,$template永远是不确定的。

模板文件是/app/templates/template_name.html.ep

我在做什么错?

+0

'get_data_template'用于'__DATA__'部分,而不是文件。 – simbabque

+0

好吧,设法使它与__DATA__部分一起工作,但我可以对文件做同样的事情吗? – Victor

+0

我找到了。查看我的更新。 – simbabque

回答

8

您正在使用Mojo :: Renderer的get_data_template,它用于从当前源代码文件的__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; 

随着test.html.ep

The magic numbers are <%= $one %> and <%= $two %>. 

输出:

The magic numbers are 1 and 2. 

option vars是重要的,所以它接受命名变量,而不是一个参数列表。

+0

我试图使用render_to_string,但它不能在独立脚本中工作 – Victor

+0

要将整个电子邮件模板放到DATA部分 – Victor

+0

@Victor它需要'$ c'作为嗯,我想。您应该阅读渲染器的来源。您需要一个处理程序,然后您可以执行'_render_template'自己的某个部分。也许如果模板得到正确加载它将会正常工作。 – simbabque