我正在使用Dancer2来构建Web应用程序。它工作得很好但是当我在浏览器中查看源时,生成的HTML源代码充满了分散的空白,就像这样
<tr>
<td>2</td>
<td>Cheeseburger</td>
<td>4.50 €</td>
</tr>
我的模板在现在有空格的地方有<% ... %>
个代码。我更喜欢它看起来像这样:
<tr>
<td>2</td>
<td>Cheeseburger</td>
<td>4.50 €</td>
</tr>
或者,甚至更好:
<tr><td>2</td><td>Cheeseburger</td><td>4.50 €</td></tr>
我正在使用Template :: Toolkit并认为TRIM
属性正是我需要的,并将其添加到我的config.yml
:
template: "template_toolkit"
session: "YAML"
engines:
session:
YAML:
cookie_duration: 6 months
template:
template_toolkit:
start_tag: '<%'
end_tag: '%>'
TRIM: '1'
但这不起作用。我已经将start_tag
和end_tag
更改为不同的(以验证此文件已被读取)并且实际上有效。但是TRIM
选项没有。
我使用了错误的选项还是在错误的地方使用?我所做的所有谷歌搜索都展示了如何以编程方式设置TT选项,例如在this answer。但由于我没有明确地实例化任何与TT有关的内容,我甚至不知道应该把这些代码放在哪里。
我使用dancer2 -a so
创建了我的应用。
视图/ index.tt
<table>
<tbody>
<% FOREACH item in group.items %>
<tr>
<td><% item.order_num %></td>
<%# one-line comment %>
<%# one-line comment %>
<%# one-line comment %>
<td><% item.desc %></td>
<%# one-line comment %>
<td><% currency(item.price) %></td>
</tr>
<% END %>
</tbody>
</table>
group.items
是一个hashrefs数组; currency
是格式化价格的功能。 <%# one-line comment %>
是我的旧代码(我正在从Handlebars迁移到Dancer2)。
lib / so.pm (应用程序的模块)
package so;
use Dancer2;
our $VERSION = '0.1';
get '/' => sub {
my $group = {
items => [
{
order_num => 1,
desc => 'Hamburger',
price => 350,
},
{
order_num => 2,
desc => 'Cheeseburger',
price => 450,
},
]
};
template 'index', {
group => $group,
currency => sub { sprintf('%.2f €', $_[0]/100); },
};
};
true;
答案 0 :(得分:5)
您正在配置文件中正确启用TRIM
,但TRIM
仅从块或模板文件的最开头和最后删除空格。要从模板文件的中间删除空格,请使用PRE_CHOMP
/POST_CHOMP
:
指令标记之外的任何内容都被视为纯文本,并且通常不会更改...这包括指令标记周围的所有空格和换行符。不生成任何输出的指令会在输出文档中留下空白。
示例:
Foo [% a = 10 %] Bar
输出:
Foo Bar
PRE_CHOMP和POST_CHOMP选项可以帮助清理一些无关的空白。两者都默认禁用。
PRE_CHOMP
和POST_CHOMP
有几种可能的设置会影响删除多少空格;它们都没有产生非常漂亮的输出,所以你必须四处游戏并决定你最喜欢哪一个。
答案 1 :(得分:2)
摆脱多余空白的另一种可能性是collapse
过滤器 1,2
Template :: Toolkit。它将所有连续的空格(包括换行符)折叠为单个空格字符:
来自文档:
[% FILTER collapse %] The cat sat on the mat [% END %]
<强>输出:强>
The cat sat on the mat
我的views/layouts/main.tt
包含一行
<% content %>
如果我用
替换它<% content FILTER collapse %>
然后HTML页面的结果正文是一行(非常长)。
注意:这会破坏任何<pre>
和<code>
块(可能还会更多)。