除了<tmpl_var name =“...”>之外,Perl模块HTML :: Template还可以使用其他语法吗?</tmpl_var>

时间:2012-07-03 23:52:05

标签: html perl templates

我正在尝试使用Perl模块HTML::Template并根据文档说明您可以使用HTML条评论而不是大于/小于它的评论标记,但它不适合我。

来自HTML :: Template

的perldoc
  

如果您对有效的HTML感兴趣,并希望您的模板符合有效   HTML语法,您可以选择以HTML注释的形式键入模板标签。   这可能对想要验证其模板的HTML作者有用   HTML :: Template处理之前的HTML语法,或者使用DTD-savvy编辑工具的人。

   <!-- TMPL_VAR NAME=PARAM1 -->

当我尝试这个时,我在apache日志中收到这些消息:

  

[Tue Jul 03 19:24:23 2012] [error] [client :: 1] HTML :: Template:尝试设置   不存在的参数'fname' - 此参数名称与任何声明都不匹配   在模板文件中:(die_on_bad_params =&gt; 1)在/var/www/cgi-bin/form.cgi第90行,   referer:.... getcontactinfo.html

将选项die_on_bad_params => 0设置为HTML::Template->new方法似乎允许模板名称的注释格式有效,任何人都可以确认这是完成此操作的正确方法吗?

编辑#1

以下是一些实际代码:

来自我的.html模板文件

<tbody>
<tr>             <td>First Name:         </td>  <td><!-- TMPL_VAR NAME=FNAME -->           </td> </tr>
<tr>             <td>Name:               </td>  <td><!-- TMPL_VAR NAME=NAME -->           </td> </tr>
<tr class="alt"> <td>Email:              </td>  <td><!-- TMPL_VAR NAME=EMAIL -->          </td> </tr>
<tr>             <td>Affiliation:        </td>  <td><!-- TMPL_VAR NAME=AFFILIATION -->    </td> </tr>

来自我的.cgi脚本

my $template = HTML::Template->new(filename => '/var/www/html/acknowledge.html', die_on_bad_params => 0);
$template->param(FNAME          => $firstName);
$template->param(NAME           => $firstName . " " . $lastName);
$template->param(EMAIL          => $email);
$template->param(AFFILIATION    => $affiliation);

2 个答案:

答案 0 :(得分:2)

到目前为止,我发现的唯一两种方法如下:

1 - HTML :: Template有一个名为vanguard_compatibility_mode的开关......来自perldocs

  

vanguard_compatibility_mode - 如果设置为1,模块将会看到s   除了标准语法之外,看起来像%NAME%。同时设置die_on_bad_params =&gt; 0。   如果您不在Vanguard Media尝试使用旧的格式模板,请不要担心   这个。默认为0。

2 - HTML :: Template还支持在注释块中嵌入模板标记,以便您的代码符合HTML标准,如下所示:<!-- TMPL_NAME NAME=FNAME -->

再次来自perldocs:

  

如果您对有效的HTML感兴趣,并希望您的模板符合有效   HTML语法,您可以选择以HTML注释的形式键入模板标签。这个   可能对想要验证其模板的HTML语法的HTML作者有用   在HTML :: Template处理之前,或者使用DTD-savvy编辑工具的人。

     

<!-- TMPL_VAR NAME=PARAM1 -->

在我为构造函数设置die_on_bad_params => 0之前,第二个选项最初对我不起作用。

答案 1 :(得分:0)

我在代码中的任何地方都没有看到名为“fname”的参数,因此我不理解错误消息。也许您发布的代码不是完整的代码?

关于die_on_bad_params:是的,将其设置为0是解决此问题的方法,我个人总是将其设置为0并且从未理解为什么人们仍然需要此选项。 在我的HTML :: Template :: Compiled(类似于HTML :: Template的替代方案)模块中,我从未实现过它。

相关问题