2011-09-23 12 views
6

yesodに付属のhamletテンプレート言語では、コンマ区切りのリストを印刷する最良の方法は何ですか?カンマ区切りリストをhamletで印刷する方法は?

など。 1つのエントリだけを出力するこのコードを仮定します。要素の間にカンマを挿入するにはどうすればよいですか?または多分「と」最後のエントリの前に追加します。

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

などTemplate Toolkitのようないくつかのテンプレート言語は、最初または最後の繰り返しを検出するためのディレクティブを提供します。

答えて

5

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

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

好きなことをしたい場合は、ハムレット値を扱う関数を書くことができます。たとえば、カンマと「and」をハムレットの値の間に追加する関数です。

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

これは別のものに1つのハムレット値を挿入するために^{...}構文を使用しています。さて、これを使ってカンマ区切りの下線付き単語のリストを書くことができます。ここで

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. 
+0

ありがとう、私はソリューションの良い集まりだと思いますが、テンプレートハスケルが提供するものを満足するものはありません。たぶん私は、特別な '' loop''変数のためのパッチをhamletに提出するべきです。 –

関連する問題