使用golang模板打印用逗号和“或”分隔的列表

时间:2014-11-12 23:11:53

标签: templates go

已经在stackoverflow上讨论了其他地方,您可以打印以逗号分隔的列表,如下所示:

{{ range $index, $element := .TeamMembers}}
    {{if $index}},{{end}}
    {{$element.Name}}
{{end}}

当您需要与最后一项不同的列表分隔符时,是否有一个简单的解决方案,包括"或":

{name}, {name}, {name}, or {name}

这是为了允许,例如,创建格式化的句子,如:

The members of this team are Bob, Jane, and Mike.

我能锻炼的任何模板代码都非常冗长和复杂。

2 个答案:

答案 0 :(得分:3)

Export a function to your template

与其他模板系统一样,

text/template不会直接编程;它只是提供了一种更好的方法来将您的数据和函数与标记拼接在一起,并且当它不足时您需要编写其他表示代码。您可以编写一个yourapp/template模块,用于导出调用New()的{​​{1}}版本,以添加您使用的常用功能。

(您可能会发现除了这些功能之外还有更多功能;例如,Django提供lots of builtins用于复数化,格式化,i18n等等,而且人们仍经常扩展该集合。)

Funcs()

Here's a variation也会导出“conjoin”和“isLast”函数,你可以在一种冗长的构造中使用,以便在最后一次循环中以不同的方式做一些任意的事情。

答案 1 :(得分:1)

对于从列表中“创建正确的英语格式化句子”,请使用函数。

您的复数示例是

The members of this team are Bob, Jane, and Mike.

在列表中只有一个元素的单个示例是什么?例如,

The only member of this team is Bob.

列表中没有元素时,您的空示例是什么?例如,

There are no members of this team.

从邮件合并中创建正确的英语句子和段落很难。