2 回答
TA贡献1876条经验 获得超5个赞
编写一个模板函数来解析名称。这是一个示例模板函数:
func resolveName(p string) (string, error) {
i := strings.LastIndex(p, ".")
if i < 0 {
i = len(p)
}
g := p[:i] + "-*" + p[i:]
matches, err := filepath.Glob(g)
if err != nil {
return "", err
}
if len(matches) != 1 {
return "", fmt.Errorf("%d matches for %s", len(matches), p)
}
return matches[0], nil
}
以下是注册为函数“resolveName”时如何在模板中使用它:
<link rel="stylesheet" href="{{ .MyCssFile | resolveName }}" />
playground example
每次渲染模板时,此函数都会解析文件的名称。更聪明的函数可能会在解析名称时缓存名称,或者在启动时遍历目录树以预构建缓存。
TA贡献1859条经验 获得超6个赞
我知道它太旧了,但也许这个图书馆会帮助你。它允许收集和散列静态文件。它还具有将文件路径从原始位置反转到散列位置的功能:
staticFilesPrefix := "/static/"
staticFilesRoot := "output/dir"
storage := NewStorage(staticFilesRoot)
err := storage.LoadManifest()
funcs := template.FuncMap{
"static": func(relPath string) string {
return staticFilesPrefix + storage.Resolve(relPath)
},
}
tmpl := template.Must(
template.New("").Funcs(funcs).ParseFiles("templates/main.tpl")
)
现在您可以像这样在模板中调用静态函数{{static "css/style.css"}}。调用将转换为/static/css/style.d41d8cd98f00b204e9800998ecf8427e.css.
- 2 回答
- 0 关注
- 147 浏览
添加回答
举报