2017-02-08 12 views
4

Я хочу сделать шаблоны .html.ep с помощью Mojolicious рендеринга в автономном скрипт, который отправляет электронную почту и запускается из хрон:Как использовать Mojolicious рендеринг в автономном скрипте Perl?

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

Вы используете get_data_template от Mojo :: 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; 

С 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' как Ну я думаю. Вы должны прочитать источник Renderer. Вам нужен обработчик, а затем вы можете сделать часть того, что '_render_template' делает сам. Возможно, если шаблон будет загружен правильно, он просто сработает. – simbabque

 Смежные вопросы

  • Нет связанных вопросов^_^