【问题标题】:Accessing hashes in Perl templates在 Perl 模板中访问哈希
【发布时间】:2012-03-10 14:24:33
【问题描述】:

在使用 Perl 的 HTML::Template 模块时如何访问散列中的变量?

我正在我的 Perl 代码中构建以下哈希:

# Load success/error flash messages
if ($query->param("submit")) {
  $template->param(
    FLASH => {
      CLASS => "success",
      MESSAGE => "Your cart has been successfully updated!"
    }
  );
}

我想在我的模板中访问这些变量。要访问常规变量,您可以:

<TMPL_VAR NAME=FLASH>

如何在我的模板中访问 FLASH['CLASS']?

【问题讨论】:

    标签: html perl templates hash cgi


    【解决方案1】:

    使用 . (点)

    FLASH.CLASS

    【讨论】:

      【解决方案2】:

      文档中没有任何内容表明您可以将参数设置为 hashref。最接近您想要做的是将 hashref 放在 arrayref 中:

      $template->param(
          FLASH => [ {
              CLASS => "success",
              MESSAGE => "Your cart has been successfully updated!"
          } ]
      );
      

      然后你可以访问它:

      <TMPL_LOOP NAME=FLASH>
        <TMPL_VAR NAME=CLASS>
        <TMPL_VAR NAME=MESSAGE>
      </TMPL_LOOP>
      

      但是拥有一个包含单个元素的数组可能有点矫枉过正。另一种方法是去掉 hashref 并展平结构:

      $template->param(
          FLASH.CLASS   => "success",
          FLASH.MESSAGE => "Your cart has been successfully updated!"
      );
      
      ...
      
      <TMPL_VAR NAME=FLASH.CLASS>
      <TMPL_VAR NAME=FLASH.MESSAGE>
      

      【讨论】:

      • 这在文档中the section on TMPL_LOOP 的末尾进行了描述。
      • 我通读了文档并找不到它,但我认为我可能遗漏了一个技巧。谢谢你的解释。我会把结构弄平。
      【解决方案3】:

      HTML::Template 总是需要数组散列的数组散列等等。 如果您有任意数据结构,您可能想尝试 HTML::Template::Compiled,您可以在其中使用点语法(免责声明:我是作者)

      还有 HTML::Template::Plugin::Dot 但我从未测试过它,它似乎有点受限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-06
        • 2017-07-05
        • 2016-12-12
        • 1970-01-01
        • 1970-01-01
        • 2015-06-26
        • 2014-06-18
        相关资源
        最近更新 更多