模块:莫霍::模板
起源:Mojo::基础

名称

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::模板实现以下属性。

自动景观(_E)

我的$bool=$mt->auto_escape;$mt=$mt->auto_escape($bool);

激活自动转义。

#“&lt;html&gt;”Mojo::Template->new(auto_escape=>1)->render(“<%='<html>'%>”);

追加

my$code=$mt->追加;$mt=$mt->append('warn“Processed template”);

将Perl代码附加到编译的模板。请注意,此代码不应包含换行符,否则错误消息中的行号可能会出错。

捕获结束(_E)

我的$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;%>

标记结束(_E)

我的$end=$mt->tag_end;$mt=$mt->tag_end(“%>”);

指示标记结束的字符,默认为%>.

<%=$foo%>

我的$tree=$mt->tree;$mt=$mt->树([['text','foo'],['line']]);

模板(如果可用)。请注意,这种结构只应非常小心地使用,因为它是非常动态的。

修剪标记(_M)

我的$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网站.