Mojo::Template-Perl-ish模板
使用Mojo::Template;#使用Perl模块my$mt=Mojo::Template->new;说$mt->render(<<'EOF');%使用时间::件;<div>%my$now=本地时间;时间:<%=$现在->hms%></div>电动势#使用参数渲染说$mt->render(<<'EOF',[1..13],'Hello World!');%my($numbers,$title)=@_;<div><h1><%=$title%></h1>%对于我的$i(@$numbers){测试<%=$i%>% }</div>电动势#使用命名变量渲染say$mt->vars(1)->render(<<'EOF',{title=>'你好,世界!'});<div><h1><%=$title%></h1>%= 5 + 5</div>电动势
Mojo::模板是一个极简、快速、非常Perl-ish的模板引擎,专门为大型项目中出现的所有小任务设计。比如预处理配置文件,从heredocs等生成文本。
请参见Mojolicious::辅助线::渲染有关如何使用生成内容的信息Mojolicious公司渲染器。
对于所有模板严格的,警告,utf8接口和Perl 5.16特征将自动启用。
<%Perl代码%><%=Perl表达式,替换为结果%><%==Perl表达式,替换为XML转义结果%><%#注释,用于调试%><%%替换为“<%”,用于生成模板%>%Perl代码行,被视为“<%line=%>”(稍后解释)%=Perl表达式行,处理为“<%=line%>”%==Perl表达式行,被视为“<%==line%>”%#注释行,用于调试%%替换为“%”,用于生成模板
可以使用“auto_escape”属性,这是中的默认值Mojolicious公司 .ep文件
例如,模板。
<%=Perl表达式,替换为XML转义结果%><%==Perl表达式,替换为结果%>
Mojo::ByteStream对象总是被排除在自动转义之外。
%使用Mojo::ByteStream qw(b);<%=b('<div>排除!</div>')%>
通过在标记末尾添加额外的等号,可以修剪标记周围的空白字符。
<%(1..3){%><%='删除此表达式周围的所有空白字符'=%><% } %>
换行符可以用反斜杠转义。
这是<%=1+1%>\单线
换行符前面的反斜杠可以用另一个反斜杠转义。
这将<%=1+1%>结果\\以倍数\\线
除非最后一个字符是反斜杠,否则每个模板都会自动附加一个换行字符。模板末尾的空行将被忽略。
此处末尾没有换行符\
您可以使用开始
和结束
关键字。请注意,这两个关键字都是周围标记的一部分,而不是实际的Perl代码,因此后面只能有空格开始
以及之前结束
.
<%my$block=开始%><%my$name=shift;=%>您好<%=$name%>。<%end%><%=$块->(“Baerbel”)%><%=$块->(“Wolfgang”)%>
Perl行也可以自由缩进。
%my$block=开始%my$name=班次;您好<%=$name%>。%结束%=$block->(“Baerbel”)%=$block->(“Wolfgang”)
Mojo::模板模板被编译为Perl子例程,这意味着您可以通过以下方式访问参数@_
.
%my($foo,$bar)=@_;%my$x=班次;测试123<%=$foo%>
将模板编译为Perl代码可能会使调试变得有点棘手,但Mojo::模板将返回Mojo::异常对象字符串化为带有上下文的错误消息。
在模板行4使用“strict-subs”时,不允许使用裸字“xx”。上下文:2:</头>3:<车身>4:%my$i=2;xx个5:%=$i*2第6页:</body>回溯(最新呼叫优先):文件“template”,第4行,在“Mojo::template::Sandbox”中文件“path/to/Mojo/Template.pm”,第123行,在“Mojo::Template”中“main”中的文件“path/to/myapp.pl”第123行
Mojo::模板实现以下属性。
我的$bool=$mt->auto_escape;$mt=$mt->auto_escape($bool);
激活自动转义。
#“<;html>;”Mojo::Template->new(auto_escape=>1)->render(“<%='<html>'%>”);
my$code=$mt->追加;$mt=$mt->append('warn“Processed template”);
将Perl代码附加到编译的模板。请注意,此代码不应包含换行符,否则错误消息中的行号可能会出错。
我的$end=$mt->capture_end;$mt=$mt->capture_end('end');
指示捕获块结束的关键字,默认为结束
.
<%my$block=begin%>一些数据!<%end%>
我的$start=$mt->capture_start;$mt=$mt->capture_start(“开始”);
指示捕获块开始的关键字,默认为开始
.
<%my$block=begin%>一些数据!<%end%>
我的$code=$mt->code;$mt=$mt->代码($code);
模板的Perl代码(如果可用)。
我的$mark=$mt->注释标记;$mt=$mt->注释标记(“#”);
表示注释开始的字符,默认为#
.
<%#这是一条评论%>
我的$compiled=$mt->compiled;$mt=$mt->已编译($compiled);
编译的模板代码(如果可用)。
my$encoding=$mt->编码;$mt=$mt->编码('UTF-8');
用于模板文件的编码,默认为UTF-8型
.
我的$cb=$mt->escape;$mt=$mt->escape(子{…});
用于转义转义表达式结果的回调,默认为Mojo::Util中的“xml_escape”.
$mt->escape(sub($str){return reverse$str});
我的$mark=$mt->escape_mark;$mt=$mt->escape_mark('=');
指示转义表达式开头的字符,默认为=
.
<%==$foo%>
我的$mark=$mt->expression_mark;$mt=$mt->表达式标记('=');
表示表达式开头的字符,默认为=
.
<%=$foo%>
我的$start=$mt->line_start;$mt=$mt->line_start(“%”);
指示代码行开始的字符,默认为%
.
%$foo=23;
我的$name=$mt->name;$mt=$mt->name('foo.mt');
当前正在处理的模板的名称,默认为模板
。请注意,此值不应包含引号或换行符,否则错误消息可能会出错。
my$namespace=$mt->namespace;$mt=$mt->名称空间('main');
用于编译模板的命名空间,默认为Mojo::Template::Sandbox
。请注意,命名空间只能在模板之间非常小心地共享,因为函数和全局变量不会自动清除。
我的$code=$mt->预编;$mt=$mt->预发('my$self=shift;');
将Perl代码前置到编译的模板。请注意,此代码不应包含换行符,否则错误消息中的行号可能会出错。
我的$mark=$mt->replace_mark;$mt=$mt->replace_mark(“%”);
用于转义标记或行开头的字符,默认为%
.
<%%my$foo=23;%>
我的$start=$mt->tag_start;$mt=$mt->tag_start(“<%”);
指示标记开始的字符,默认为<%
.
<%$foo=23;%>
我的$end=$mt->tag_end;$mt=$mt->tag_end(“%>”);
指示标记结束的字符,默认为%>
.
<%=$foo%>
我的$tree=$mt->tree;$mt=$mt->树([['text','foo'],['line']]);
模板(如果可用)。请注意,这种结构只应非常小心地使用,因为它是非常动态的。
我的$mark=$mt->trimmark;$mt=$mt->trim_mark('-');
字符激活自动空白修整,默认为=
.
<%=$foo=%>
我的$unparsed=$mt->未分析;$mt=$mt->未分析(“<%=1+1%>”);
原始未分析模板(如果可用)。
我的$bool=$mt->vars;$mt=$mt->vars($bool);
不要使用值列表,而是使用带有命名变量的哈希引用将数据传递给模板。
#“有效!”Mojo::Template->new(vars=>1)->render('<%=$test%>!',{test=>'works'});
Mojo::模板从继承所有方法Mojo::基础并实现了以下新功能。
$mt=$mt->解析(“<%=1+1%>”);
将模板解析为“树”.
我的$output=$mt->过程;我的$output=$mt->进程(@args);我的$output=$mt->进程({foo=>'bar'});
处理先前分析的模板并返回结果,或Mojo::异常对象。
#分析和处理说Mojo::Template->new->parse('Hello<%=$_[0]%>')->process('Bender');#重用模板(以获得更好的性能)my$mt=Mojo::Template->new;说$mt->render(“你好<%=$_[0]%>!”,“Bender”);说$mt->过程(“Fry”);说$mt->过程('Leela');
我的$output=$mt->渲染(“<%=1+1%>”);my$output=$mt->render('<%=shift()+shift(()%>',@args);我的$output=$mt->render(“<%=$foo%>”,{foo=>“bar”});
渲染模板并返回结果,或Mojo::异常对象。
#较长版本我的$output=$mt->parse(“<%=1+1%>”)->进程;#使用参数渲染说Mojo::Template->new->render('<%=$_[0]%>','bar');#使用命名变量渲染比方说Mojo::Template->new(vars=>1)->render('<%=$foo%>',{foo=>'bar'});
我的$output=$mt->render_file('/tmp/foo.mt');我的$output=$mt->render_file('/tmp/foo.mt',@args);我的$output=$mt->render_file('/tmp/bar.mt',{foo=>'bar'});
等同于“渲染”,但渲染模板文件。
您可以设置MOJO_模板_DEBUG
将一些高级诊断信息打印到的环境变量STDERR公司
.
MOJO_TEMPLATE_DEBUG=1
Mojolicious公司,Mojolicious::指南,https://mojolicio.org网站.