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 關注
- 180 瀏覽
添加回答
舉報