我想将svg文件包含为html部分,因此我可以在HTML中使用它内联。 我现在把我的svg包装在html文件中并包含它们:
{{ template "/partial/my-svg.html" }}
但我想直接包括我的svg。 PHP就是这样做的:
<?php echo file_get_contents("/partial/my-svg.svg"); ?>
我认为go有类似的东西吗?所以我认为我需要使用自定义函数扩展模板逻辑。类似的东西:
{{ includeSvg "/partial/my-svg.svg" }}
这样的功能在go中会是什么样子?
答案 0 :(得分:1)
以下是如何添加模板函数并在模板中按路径包含svg的工作示例
package main
import (
"html/template"
"io/ioutil"
"log"
"net/http"
)
func IncludeHTML(path string) template.HTML {
b, err := ioutil.ReadFile(path)
if err != nil {
log.Println("includeHTML - error reading file: %v", err)
return ""
}
return template.HTML(string(b))
}
func main() {
tmpl := template.New("sample")
tmpl.Funcs(template.FuncMap{
"IncludeHTML": IncludeHTML,
})
tmpl, err := tmpl.Parse(`
<!DOCTYPE>
<html>
<body>
<h1>Check out this svg</h1>
{{ IncludeHTML "/path/to/svg" }}
</body>
</html>
`)
if err != nil {
log.Fatal(err)
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
if err := tmpl.Execute(w, nil); err != nil {
log.Println("Error executing template: %v", err)
}
})
if err := http.ListenAndServe(":8000", nil); err != nil {
log.Fatal(err)
}
}