2016-12-07 18 views
2

私はDancer2を使ってWebアプリケーションを構築しています。それは素晴らしい作品が、私は、ブラウザでソースを表示、生成されたHTMLソースコードがそうDancer2のconfig.yml(空白を取り除く)のTemplate :: Toolkitの設定

<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> 

私はテンプレートを使用しています:: 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はハッシュリファレンスの配列です。 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; 
+0

私たちがテストできるように、あなたの例と一致するテンプレートの切り取りをここに示してください。 – stevieb

+1

@stevieb私はちょうど私のポストを修正しました。 – PerlDuck

+1

個々のブロックから空白を無視するには、そこに '-'を置くこともできます。それぞれ「<%-' and '-%>」となります。これをJSコードで使用する場合は注意してください。足で自分を撃つかもしれません。 – simbabque

答えて

5

あなたの設定ファイルに正しくTRIMを有効にしているが、TRIMは非常に始まり、ブロックの最後から空白を削除しますまたはテンプレートファイル。 、テンプレートファイルの途中から空白を削除PRE_CHOMP/POST_CHOMP使用するには、次のディレクティブタグ外

何をこのディレクティブタグを取り巻くすべての空白や改行文字が含まれています...プレーンテキストとみなされ、一般的に変更されずに通過させます。出力を生成しないディレクティブは、出力ドキュメントにギャップを残します。

例:

Foo 
[% a = 10 %] 
Bar 

出力:

Foo 

Bar 

PRE_CHOMPとPOST_CHOMPオプションは、この余分な空白文字の一部をクリーンアップすることができます。どちらもデフォルトで無効になっています。

PRE_CHOMPPOST_CHOMPにはいくつの空白が削除されるかに影響する設定がいくつかあります。それらのどれも本当にきれいな出力を生成しないので、あなたは遊んで、あなたが一番好きなものを決めなければなりません。

+0

config.ymlにTRIMが正しく設定されていることを確認していただきありがとうございます。それはたくさんの助けになりました。私はPRE/POST_CHOMPで少し演奏しましたが、実際にはより良い(しかし完璧ではない)結果が得られます。私はTRIMを誤解し、_ "PREとPOST_CHOMPをmaxに_"と似ていると思った。 – PerlDuck

2

余計な空白を取り除くために別の可能性はcollapseフィルタ1、テンプレートの2 ::ツールキットです。ドキュメントから

:これは、単一の空白文字に(改行を含む)すべての連続した空白を崩壊

[% FILTER collapse %] 

    The cat 

    sat on 

    the mat 

[% END %] 

出力:

The cat sat on the mat 

マイviews/layouts/main.ttは行が含まれています

<% content %> 

私は

<% content FILTER collapse %> 

であることを交換する場合は、HTMLページの結果のボディは、1つの(そして非常に長い)ラインです。

注意:これは、<pre><code>ブロック(さらに多分)を破損します。

関連する問題