我正在尝试使用tmpl_loop设置嵌套循环,但我对HTML :: Template模块的经验很少。
我想要做的布局是这样的:
Name Start End Dog 04-02-1996 06-19-2011 Breed: Terrier Sex: Male Color: Brown Eye Color: Green Weight: 10 Pounds Attribute: bla bla Name Start End Dog 03-04-1985 06-01-1988 Breed: Retriever Sex: Female Color: Black Eye Color: Green Weight: 50 Pounds Attribute: bla bla
等等......
狗的数量可能会有所不同,它可能有也可能没有附加信息,但如果有,则必须显示所有字段。
这是我正确显示水平信息的块。
<table width="100%">
<tr>
<tmpl_loop name=labels>
<td class="label"> <TMPL_VAR label>: </td>
</tmpl_loop>
</tr>
<tmpl_loop name=values>
<tr>
<tmpl_loop name=values>
<td><TMPL_VAR value ></td>
</tmpl_loop>
</tr>
</tmpl_loop>
</table>
但是如何修改HTML模板以在示例显示中显示信息?
此外,相应的Perl数据结构如何?
谢谢。
答案 0 :(得分:3)
在您的情况下,您不需要嵌套循环。
将模板文件更改为:
<table>
<TMPL_LOOP dogs>
<tr><td> </td><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td></td><td>Name</td>
<td></td><td>Start</td>
<td></td><td>End</td>
</tr>
<tr>
<td><TMPL_VAR ldogname></td><td><TMPL_VAR dogname></td>
<td><TMPL_VAR lstart></td><td><TMPL_VAR start></td>
<td><TMPL_VAR lend></td><td><TMPL_VAR end></td>
</tr>
<tr>
<td><TMPL_VAR lbreed></td><td><TMPL_VAR breed></td>
<td><TMPL_VAR lsex></td><td><TMPL_VAR sex></td>
<td><TMPL_VAR lcolor></td><td><TMPL_VAR color></td>
</tr>
<tr>
<td><TMPL_VAR leye></td><td><TMPL_VAR eye></td>
<td><TMPL_VAR lweight></td><td><TMPL_VAR weight></td>
<td><TMPL_VAR lattr></td><td><TMPL_VAR attr></td>
</tr>
</TMPL_LOOP>
</table>
和你的代码:
#!/usr/bin/perl
use warnings;
use strict;
use HTML::Template;
my $template=HTML::Template->new(filename=>'template.txt');
my @dogs=( #dogs data
{dogname=>'Dog',start=>'04-02-1996',end=>'06-19-2011',breed=>'Terrier',sex=>'Male',color=>'Brown',eye=>'Green',weight=>'10 Pounds',attr=>'bla bla'},
{dogname=>'Dog',start=>'03-04-1985',end=>'06-01-1988',breed=>'Retriever',sex=>'Female',color=>'Black',eye=>'Green',weight=>'50 Pounds',attr=>'bla bla'},
);
my %labels=(
ldogname=>'',
lstart=>'',
lend=>'',
lbreed=>'Breed: ',
lsex=>'Sex: ',
lcolor=>'Color: ',
leye=>'Eye Color: ',
lweight=>'Weight: ',
lattr=>'Attribute: '
);
for my $dog (@dogs) { #mix labels and values
while (my ($k,$v)=each %labels) {
$dog->{$k}=$v;
}
}
$template->param(dogs=>\@dogs);
print $template->output;
您将获得所需的输出。
但是要回答你的问题,你可以查看一些嵌套循环的例子:http://www.perlmonks.org/?node_id=770278 http://www.perlmonks.org/?node_id=193367(谷歌会返回更多结果)