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

 

 

 

标签