Template and custom function; panic: function not defined

后端 未结 2 518
无人及你
无人及你 2021-02-04 01:39

Using html/template I am trying to use one of my own functions inside a template. Unfortunately I am unable to use the function map feature of go\'s templates. All

2条回答
  •  孤城傲影
    2021-02-04 02:00

    IIRC, template functions map must be defined by .Funcs before parsing the template. The below code seems to work.

    package main
    
    import (
            "html/template"
            "io/ioutil"
            "net/http"
            "strconv"
    )
    
    var funcMap = template.FuncMap{
            "humanSize": humanSize,
    }
    
    const tmpl = `
    
        {{range .}}
        
    {{.Name}} {{humanSize .Size}}
    {{end}} ` var tmplGet = template.Must(template.New("").Funcs(funcMap).Parse(tmpl)) func humanSize(s int64) string { return strconv.FormatInt(s/int64(1000), 10) + " KB" } func getPageHandler(w http.ResponseWriter, r *http.Request) { files, err := ioutil.ReadDir(".") if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if err := tmplGet.Execute(w, files); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } func main() { http.HandleFunc("/", getPageHandler) http.ListenAndServe(":8080", nil) }

提交回复
热议问题