我正在尝试使用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);
答案 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的替代方案)模块中,我从未实现过它。