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' =%> <% } %>