Mojolicious模板渲染(二)
上一篇我们讲了渲染器render方法中参数的表达方式。本篇开始,我们将模板文件中如何Perl程序,也就是mojolcious的模板系统,官方名称Embedded Perl,嵌入式perl,简写为ep。
ep基于 Mojo::Template模块开发,他和php有些类似。通过特定的特殊标签,可以在HTML中插入perl语言表达式:
<% Perl代码 %> <%= perl表达式, html渲染后替换为XML转义结果 %> <%== perl表达式,html渲染后替换为表达式的结果 %> <%# perl注释,开发debug模式使用 %> <%% 替换为"<%", 对生成模板很有用 %> #此意味当我们的html网页存在字符“<%”时,我们需要用“<%%”代替 % 此一行的都必须为Perl代码, 严格模式下应写为"<% line =%>" %= 此一行的都必须为Perl代码, 严格模式下应写为"<%= line %>" %== 此一行的都必须为Perl代码, 严格模式下应写为"<%== line %>" %# 此一行都为注释代码 %% 如果在渲染后的html中开头要有%,可以用“%%”在ep中代替
上面8个例子,前4个例子是可以直接嵌入html标签的标签方式嵌入,后4个是整行方式嵌入。下面通过一个html中嵌入for循环的例子展示一下具体的应用:
%# 生成一个1到10的网页列表
<% my $i = 10; %>
<ul>
<% for my $j (1 .. $i) { %>
<li>
<%= $j %>
</li>
<% } %>
</ul>
% my $i = 10;
<ul>
% for my $j (1 .. $i) {
<li>
%= $j
</li>
% }
</ul>
如果把上面两种方式转换为Perl语言的脚本,程序的主要内容如下:
my $output = '';
my $i = 10;
$output .= '<ul>';
for my $j (1 .. $i) {
$output .= '<li>';
$output .= xml_escape scalar + $j;
$output .= '</li>';
}
$output .= '</ul>';
return $output;
通过在嵌入式标签的前部多加一个等号,可以关闭对<,>,&,’,”这五种符号的转义,这种做法可以防止XSS攻击行为:
<%= 'I ♥ Mojolicious!' %> <%== '<p>I ♥ Mojolicious!</p>' %>
只有 Mojo::ByteStream 对象会自动被排除到转义之外:
<%= b('<p>I ♥ Mojolicious!</p>') %>
标签周围的空白字符可以通过在嵌入标签的尾部增加一个=等号来trim(修剪掉):
<% for (1 .. 3) { %>
<%= 'Trim all whitespace characters around this expression' =%>
<% } %>



