6

yesod に付属している hamlet テンプレート言語を使用して、コンマ区切りのリストを出力する最良の方法は何ですか?

たとえば、エントリを次から次へと出力するこのコードを想定すると、要素間にカンマを挿入するにはどうすればよいでしょうか? または、最後のエントリの前に「and」を追加することもできます。

The values in the list are
$ forall entry <- list
    #{entry}
and that is it.

Template Toolkitなどの一部のテンプレート言語は、最初または最後の反復を検出するディレクティブを提供します。

4

1 に答える 1

5

そのような組み込みのものはないと思います。幸いなことに、Hamlet ではヘルパー関数を簡単に使用できます。たとえば、アイテムがプレーンな文字列の場合、 を使用Data.List.intercalateしてそれらの間にカンマを追加できます。

The values in the list are 
#{intercalate ", " list} 
and that is it.

もっと手の込んだことをしたい場合は、Hamlet の値を操作する関数を作成できます。たとえば、リスト内の Hamlet 値の間にカンマと「and」を追加する関数を次に示します。

commaify [x] = x
commaify [x, y] = [hamlet|^{x} and ^{y}|]
commaify (x:xs) = [hamlet|^{x}, ^{commaify xs}|]

これは^{...}構文を使用して、1 つの Hamlet 値を別の Hamlet 値に挿入します。これを使用して、下線付きの単語のコンマ区切りリストを作成できます。

The values in the list are 
^{commaify (map underline list)} 
and that is it.

ここにunderlineあるのは、プレーン テキストよりも興味深いものを生成するための小さなヘルパー関数です。

underline word = [hamlet|<u>#{word}|]

レンダリングすると、次の結果が得られます。

The values in the list are <u>foo</u>, <u>bar</u> and <u>baz</u> and that is it.
于 2011-09-23T22:39:00.117 に答える