【问题标题】:Perl (Dancer) & Template Toolkit - looping thru hashrefPerl (Dancer) & Template Toolkit - 通过 hashref 循环
【发布时间】:2013-12-26 00:49:12
【问题描述】:

我将 Perl 与 DancerTemplate Toolkit 一起使用。

我正在将 hashref 传递给我的模板。

这是它的构建方式,从一个数组 (@musicList):

my $hashrMusic = {};
my $intCount = 0;

foreach my $track ( @musicList ) {
    $hashrMusic->{ $intCount } = $track;
    $intCount++ ;
}

这是Dumper 版本的哈希:

 $VAR1 = {
      '1049' => '09 Faruk\'s Funk (Matt Stein + Nickodemus Rework).mp3',
      '127' => '45 There She Goes.mp3',
      '71' => 'Kenny Wayne Shepherd - One Foot On The Pass.mp3'
        };

这是我将 hashref 传递给模板的方式:

template 'scan.tt', {
    'countTracks' => scalar keys %$hashrMusic,
    'tracks' => $hashrMusic,
    'dump' => Dumper($hashrMusic),
}

现在我正在尝试使用以下 TT 代码循环遍历 hasref 以显示它:

          <ul>
            <% FOREACH track IN tracks %>
              <li><% track.value %></li>
            <% END %>
          </ul>

这不会产生任何输出(但countTracks 可以,就像dump 一样)。有什么提示/想法吗?

【问题讨论】:

  • &lt;ul&gt; &lt;% FOREACH track IN tracks.keys.nsort %&gt; &lt;li&gt;&lt;% track.filename %&gt; &lt;% END %&gt; &lt;/ul&gt;
  • @jlareau,也不起作用。在您提出的解决方案中,track 应该是关键,但它是空的。 &lt;ul&gt; &lt;% FOREACH i IN tracks.keys.nsort %&gt; &lt;li&gt; &lt;% $i %&gt; &lt;/ul&gt; 也不起作用。
  • 你为什么使用 $ 符号?
  • 尝试:foreach track in tracking 然后使用track.filename
  • 我正在使用 $ 符号,就像在以下 Dancer 文档中一样:metacpan.org/pod/Dancer::Tutorial#Our-first-route-handler

标签: perl template-toolkit dancer


【解决方案1】:

你忘记了结束 /li。此外,您在 hashrefs 方面滥用 FOREACH。

试试这个:

 <ul>
   <% FOREACH track IN tracks %>
     <li>
       The key is: <% track.key %>
       The filename is: <% track.value.filename %>
     </li>
   <% END %>
 </ul>

有关 FOREACH 的完整文档,请访问此处:

http://www.template-toolkit.org/docs/manual/Directives.html#section_FOREACH

【讨论】:

  • 感谢您指出
  • 问题。您的解决方案仅打印 hashref (HASH(0x7f83d196fd40)),仅此而已。我试图简化哈希本身: $VAR1 = { '1049' => '09 Faruk\'s Funk (Matt Stein + Nickodemus Rework).mp3', '127' => '45 There She Goes.mp3', ' 71' => 'Kenny Wayne Shepherd - One Foot On The Pass.mp3' } 我使用track.value 而不是track.value.filename,结果相同:(
  • 您可以将您的作业发布到 $musicFiles 吗?
  • 另外,您是否看到正确的迭代次数(在您发布的示例中为 3),您是否看到“关键是:...”和“文件名是:”...
  • 我编辑了问题以添加 hashref 的分配。 TT 循环实际上并不循环:只有一次迭代(输出在
    • 标签之间)。
  • 【解决方案2】:

    Dancer 默认不使用 TemplateToolkit,而是一个看起来像模板引擎,不支持 TT 标签。 挖掘配置文件并将模板引擎配置为 TT 解决了这个问题。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签