html - 模板工具包中的 Perl 多维散列
问题描述
我有以下 perl 多维散列,它作为散列引用从 Dancer 传递到 Template Toolkit。我无法弄清楚如何在模板工具包中显示它。
$VAR1 = {
'TylerMontgomery(2022)' => {
'so' => 1,
'bb' => 1,
'rbis' => 0,
'atbats' => 7,
'runs' => 2,
'hits' => 2
},
'ChaseLangan(2022)' => {
'runs' => 4,
'hits' => 4,
'atbats' => 5,
'bb' => 0,
'rbis' => 2,
'so' => 1
},
'BryceJones(2021)' => {
'hits' => 2,
'runs' => 2,
'atbats' => 4,
'bb' => 1,
'rbis' => 4,
'so' => 1
},
'WillGrimes(2021)' => {
'bb' => 0,
'rbis' => 0,
'so' => 1,
'runs' => 1,
'hits' => 2,
'atbats' => 3
},
};
我可以在我的 perl 代码中使用以下内容对哈希进行交互:
foreach my $name (sort keys %season) {
printf "%-27.27s", "$name: ";
foreach my $stat (sort keys %{ $season{$name} }) {
printf "%-12.12s", "$stat: $season{$name}{$stat} ";
## cal. avg
$season{$name}{AVG} = $season{$name}{hits} / $season{$name}{atbats};
}
printf "%4s %.3f\n", "avg:", $season{$name}{AVG};
}
到目前为止,我为展示它所做的尝试似乎有些不合时宜。任何帮助将不胜感激。
<table style="width:100%; line-height:40px;">
<% FOREACH Season = Season %>
<tr>
<td width="5">Season.key <% Season.key %></td>
<td width="5">Season.val <% Season.value %></td>
<td width="5">Season.val.atbats <% Season.value.atbats %>
<td width="5">Season.val.hits <% Season.value.hits %>
</tr>
<% END %>
</table>
最终在网页上显示的内容:
HASH(0xabd1ef4)HASH(0xabd1ef4)
Season.key Season.val Season.val.atbats Season.val.hits
解决方案
FOREACH
遍历一个数组。遍历返回的数组hash.keys
。
<% FOREACH id IN payload.keys %>
<% season = payload.$id %>
<p><% season.runs %></p>
<p><% season.atbats %></p>
<% END %>
完整代码:
use Template qw( );
my %seasons = (
'TylerMontgomery(2022)' => {
'so' => 1,
'bb' => 1,
'rbis' => 0,
'atbats' => 117,
'runs' => 2,
'hits' => 2
},
'ChaseLangan(2022)' => {
'runs' => 4,
'hits' => 24,
'atbats' => 5,
'bb' => 0,
'rbis' => 2,
'so' => 1
},
'BryceJones(2021)' => {
'hits' => 2,
'runs' => 2,
'atbats' => 4,
'bb' => 2,
'rbis' => 4,
'so' => 1
},
);
my $tt = Template->new({
START_TAG => '<%',
END_TAG => '%>',
});
my $template = <<'__EOS__';
<!DOCTYPE html>
<html lang="en">
<head>
<!-- head definitions go here -->
<meta charset="utf-8">
</head>
<body>
<div class="container" style="margin-top:20px;">
<% FOREACH id IN seasons.keys %>
<% season = seasons.$id %>
<p><% season.runs %></p>
<p><% season.atbats %></p>
<% END %>
</div>
</body>
</html>
__EOS__
$tt->process(\$template, {
title => 'Get Softball Season Stats',
seasons => \%seasons,
})
or die($tt->error);
输出
<!DOCTYPE html>
<html lang="en">
<head>
<!-- head definitions go here -->
<meta charset="utf-8">
</head>
<body>
<div class="container" style="margin-top:20px;">
<p>4</p>
<p>5</p>
<p>2</p>
<p>117</p>
<p>2</p>
<p>4</p>
</div>
</body>
</html>
注意:不要season
同时用于集合和单个季节。我使用了更好的变量名称,您应该调整数据以匹配。
推荐阅读
- ruby-on-rails - 独立于父模型更新嵌套属性对象
- python - Dataframe列条件的Timedelta计算
- c# - 如何在word文件中识别段落中的粗体字
- style-transfer - 风格转移的 save_obj 问题 Hiroharu-kato
- javascript - 数字输入中的 Google Chrome Android 逗号 (Bootstrap-Vue)
- android - 如何将凭证从 android / ios 应用程序转移到 keycloak webview
- python - TypeError:需要一个类似字节的对象,而不是'_io.BytesIO' | 姜戈 | 枕头
- c# - 尝试使用 wsdl.exe 创建 C# 代码时出错
- python - Fastapi python代码执行速度受uvicorn vs gunicorn部署的影响
- c# - 在最近的空闲位置向数组添加元素