在Dancer2的config.yml中配置Template :: Toolkit(修剪空白)

时间:2016-12-07 20:41:52

标签: perl template-engine dancer

我正在使用Dancer2来构建Web应用程序。它工作得很好但是当我在浏览器中查看源时,生成的HTML源代码充满了分散的空白,就像这样

    <tr>
        <td>2</td>



            <td>Cheeseburger</td>

        <td>4.50&nbsp;€</td>
    </tr>

我的模板在现在有空格的地方有<% ... %>个代码。我更喜欢它看起来像这样:

    <tr>
        <td>2</td>
            <td>Cheeseburger</td>
        <td>4.50&nbsp;€</td>
    </tr>

或者,甚至更好:

<tr><td>2</td><td>Cheeseburger</td><td>4.50&nbsp;€</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_tagend_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&nbsp;€', $_[0]/100); },
    };
};

true;

2 个答案:

答案 0 :(得分:5)

您正在配置文件中正确启用TRIM,但TRIM仅从块或模板文件的最开头和最后删除空格。要从模板文件的中间删除空格,请使用PRE_CHOMP/POST_CHOMP

  

指令标记之外的任何内容都被视为纯文本,并且通常不会更改...这包括指令标记周围的所有空格和换行符。不生成任何输出的指令会在输出文档中留下空白。

     

示例:

Foo
[% a = 10 %]
Bar
     

输出:

Foo

Bar
     

PRE_CHOMP和POST_CHOMP选项可以帮助清理一些无关的空白。两者都默认禁用。

PRE_CHOMPPOST_CHOMP有几种可能的设置会影响删除多少空格;它们都没有产生非常漂亮的输出,所以你必须四处游戏并决定你最喜欢哪一个。

答案 1 :(得分:2)

摆脱多余空白的另一种可能性是collapse过滤器 12 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>块(可能还会更多)。