【问题标题】:Can the Perl Module HTML::Template use other syntaxes besides <TMPL_VAR NAME=...>?Perl 模块 HTML::Template 可以使用 <TMPL_VAR NAME=...> 之外的其他语法吗?
【发布时间】:2012-07-04 11:08:25
【问题描述】:

我正在尝试使用 Perl 模块 HTML::Template 并且根据文档,它说您可以在其标记周围使用 HTML cmets 而不是大于/小于,但事实并非如此为我工作。

来自 HTML::Template 的 perldoc

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

   <!-- TMPL_VAR NAME=PARAM1 -->

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

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

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

【问题讨论】:

  • 请出示您的实际代码。

标签: html perl templates


【解决方案1】:

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

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

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

2 - HTML::Template 还支持在注释块中嵌入模板标签,以便您的代码符合 HTML,例如:&lt;!-- TMPL_NAME NAME=FNAME --&gt;

再次来自 perldocs:

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

&lt;!-- TMPL_VAR NAME=PARAM1 --&gt;

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 是的,我截断了问题中的示例代码,我添加了缺失的行以便更清楚。
    • 好吧,如果你有一个模板参数 fname,那么 HTML::Template 根本不应该抱怨。
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2012-07-26
    • 2017-08-14
    • 2018-03-01
    • 2016-10-14
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多