如何在模板中处理字符串格式

时间:2014-08-06 15:28:57

标签: templates go

我将一个结构传递给一个模板,该模板有时包含一些太长而无法显示的字符串。在任何其他语言中,我只是在模板本身附加了一个格式规则。在模板中完成格式化的惯用方法是什么?

示例:

type struct MyStruct{
    something    string
    anotherThing string
}

在模板中

<table>
{{ range .Rows }}      //NOTE! Rows is an array of MyStruct objects 
<tr>
<td>{{ .something }}</td>
<td>{{ .anotherThing }}</td>        
</tr>
{{ end }}
</table>

如果从上面不明显的话,问题是“你怎么去确定。另一个或者。某些东西不会显示超过40个字符?”

一个解决方案可能是使结构包含四个值,两个原始字符串和两个格式化版本,即在.go文件中进行格式化,然后始终在悬停或类似的工具提示中显示原始字符串这一点。

2 个答案:

答案 0 :(得分:7)

您可以向FuncMap添加自定义截断功能。有人在操场上发布example,它将模板变量转换为大写,如下所示:

{{ .Name | ToUpper  }}

编辑。将以上代码调整为基本Truncate过滤器:http://play.golang.org/p/e0eaf-fyrH

{{ .Name | Truncate  }}

如果您想将参数传递给Truncate,您也可以这样写:

{{ Truncate .Name 3 }}

另请参阅:http://play.golang.org/p/Gh3JY1wzcF

答案 1 :(得分:1)

除了使用自定义函数之外,还有一种方法是使用Stringer接口定义您自己的类型:

type ShortString string

func(ss ShortString) String() string {
    if len(ss) > 10 {
        return string(ss[:5]) + "..."
    }
    return string(ss)
}

type MyStruct struct {
    Something    ShortString
}

playground显示两种方法。