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

这使用^{...}语法将一个 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 回答