3

我正在尝试使用该Perl模块HTML::Template,根据文档,它说您可以HTML在其标记周围使用注释而不是大于/小于,但它对我不起作用。

来自 HTML::Template 的 perldoc

如果您对有效的 HTML 很狂热,并且希望您的模板符合有效的 HTML 语法,您可以选择以 HTML 注释的形式键入模板标签。这可能对希望在处理 HTML::Template 之前验证其模板的 HTML 语法或使用 DTD 精通编辑工具的 HTML 作者有用。

   <!-- TMPL_VAR NAME=PARAM1 -->

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

[2012 年 7 月 3 日星期二 19:24:23] [错误] [client ::1] HTML::Template : 尝试设置不存在的参数 'fname' - 此参数名称与模板文件中的任何声明都不匹配: (die_on_bad_params => 1) 在 /var/www/cgi-bin/form.cgi 第 90 行,引用者:....getcontactinfo.html

将选项设置die_on_bad_params => 0HTML::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);
4

2 回答 2

2

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

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

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

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

再次来自 perldocs:

如果您对有效的 HTML 很狂热,并且希望您的模板符合有效的 HTML 语法,您可以选择以 HTML 注释的形式键入模板标签。这可能对希望在处理 HTML::Template 之前验证其模板的 HTML 语法或使用 DTD 精通编辑工具的 HTML 作者有用。

<!-- TMPL_VAR NAME=PARAM1 -->

This 2nd option didn't work originally for me until I set the die_on_bad_params => 0 for the constructor.

于 2012-07-04T00:36:06.883 回答
0

I don't see a paramater named "fname" anywhere in your code, so I don't understand the error message. Maybe the code you posted is not the complete code?

Regarding die_on_bad_params: Yes, setting it to 0 is the way to solve this, and I personally always set it to 0 and have never understood why one would need this option anyway. In my HTML::Template::Compiled (similar alternative to HTML::Template) module I have never implemented it.

于 2012-07-05T10:28:33.767 回答