Templates 如何从template.FuncMap返回HTML模板?
我在一次会议上问了这个问题,但没有得到答复 我正在写一篇文章,我遇到了一个难题,那就是如何标记不同的媒体 我的当前代码如下: 这肯定是错误的。我不知道如何使用模板在这里的光 我看到的所有使用template.FuncMap的示例都只使用字符串 简化示例: 理想情况下,我会在这里使用html模板,而不是fmt.Sprintf。是的,我意识到我不是HTML转义文件名,这是错误的,但我不知道如何从这个函数再次使用HTML模板 提前感谢您的指导,您应该将逻辑(功能)与演示(模板)分开。 在Templates 如何从template.FuncMap返回HTML模板?,templates,go,Templates,Go,我在一次会议上问了这个问题,但没有得到答复 我正在写一篇文章,我遇到了一个难题,那就是如何标记不同的媒体 我的当前代码如下: 这肯定是错误的。我不知道如何使用模板在这里的光 我看到的所有使用template.FuncMap的示例都只使用字符串 简化示例: 理想情况下,我会在这里使用html模板,而不是fmt.Sprintf。是的,我意识到我不是HTML转义文件名,这是错误的,但我不知道如何从这个函数再次使用HTML模板 提前感谢您的指导,您应该将逻辑(功能)与演示(模板)分开。 在templat
template.FuncMap
中注册的函数不应依赖模板作为其输入来生成输出。如果要将HTML模板作为函数输出返回,则应手动生成它(使用fmt.Sprintf
等)
在您的情况下,您只需注册一个函数来检查媒体类型,然后使用模板的操作生成不同的输出。该函数可能如下所示:
func matchType(ext, s string) bool {
return strings.ToLower(ext) == strings.ToLower(path.Ext(s))
}
{{ range .Media }}<p>
{{if . | matchType ".jpg"}}<img src={{.}}>
{{else if . | matchType ".mp4"}}<video controls src={{.}}></video>
{{else}}{{.}}
{{end}}</p>
{{ end }}
模板如下所示:
func matchType(ext, s string) bool {
return strings.ToLower(ext) == strings.ToLower(path.Ext(s))
}
{{ range .Media }}<p>
{{if . | matchType ".jpg"}}<img src={{.}}>
{{else if . | matchType ".mp4"}}<video controls src={{.}}></video>
{{else}}{{.}}
{{end}}</p>
{{ end }}
{{range.Media}}
{{if.| matchType.jpg}
{{else if.| matchType.mp4}
{{else}{{.}}
{{end}
{{end}
一个基于简化示例的工作示例:谢谢,该方法似乎更好一些,但我不确定是否喜欢“if,else,else,else”类型的结构。