繁体   English   中英

如何从template.FuncMap返回HTML模板?

[英]How to return a HTML template from a template.FuncMap?

我在https://groups.google.com/forum/#!topic/golang-nuts/CUbdaHkESJk上提出了这个问题,但未收到任何回复。

我正在编写一个基于Web的媒体查看器,而且我已经想到了如何标记不同的媒体。

我现在的代码: https//github.com/kaihendry/lk/blob/5de96f9fe012e9894deef7b9924f96dd8d9c806c/main.go#L181肯定是错的。 我很困惑如何根据https://golang.org/pkg/html/template/#Template.Execute使用模板

我看到的使用template.FuncMap的所有例子都只使用字符串......

简化示例: https//play.golang.org/p/mAue8SDDw6

理想情况下,我会在这里使用html模板而不是fmt.Sprintf。 是的,我意识到我不是HTML转义错误的文件名,但我不知道如何从这个函数再次使用HTML模板。

提前感谢任何指导,

您应该将逻辑 (功能)与表示 (模板)分开。 template.FuncMap注册的函数不应该依赖于模板作为生成输出的输入。 如果要将HTML模板作为函数输出返回,则应手动生成(使用fmt.Sprintf等)。

在您的情况下,您只需注册一个函数来检查媒体类型,然后使用模板的{{if}}动作生成不同的输出。 该功能可能如下所示:

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

一个基于简化示例的工作示例: https//play.golang.org/p/U64_7UHZQU

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM