Mojolicious命令行渲染文件时如何使用stash及正确传参?
Mojo::Template 命令行使用问题解答
传参报错修复
你遇到的报错是因为 render_file 方法的参数传递逻辑和控制器stash不同:直接将hash展开为列表(%$options)传入时,会被识别为多个独立的位置参数,而非模板可直接调用的键值对结构,不符合方法的参数要求。
正确写法是直接传入hash引用,即可实现和控制器stash完全一致的使用效果,模板内可直接通过键名调用对应值:
my $mt = Mojo::Template->new; # 直接传入hash引用,不需要展开为列表 my $html = $mt->render_file('templates/some_file.html.ep', $options);
如果你的$options包含value => 1的键值对,模板内直接写<%= $value %>即可读取到对应值,和控制器渲染模板的用法完全一致。
命令行使用render_to_string说明
render_to_string 方法不限制运行环境,命令行场景下可以正常调用,示例用法如下:
use Mojo::Template; my $mt = Mojo::Template->new; # 构造和stash结构一致的hash引用 my $stash = { value => 1, name => '测试内容' }; # 渲染字符串模板 my $output = $mt->render_to_string('参数name的值为:<%= $name %>,value的值为:<%= $value %>', $stash); print $output;
运行上述代码会输出:参数name的值为:测试内容,value的值为:1
内容的提问来源于stack exchange,提问作者muhana
相关产品推荐
相关产品推荐

