转到html模板如何从funcMap

时间:2017-08-21 01:48:09

标签: templates go

我知道如何从*http.Request结构中获取用户IP:

strings.Split(r.RemoteAddr, ":")[0]

我知道如何定义template.FuncMap

funcMap = template.FuncMap{                                                           
        // gets the time since the post was posted                                    
        "since": func(t time.Time) string {                                           
                s := time.Since(t).String()                                           
                return strings.Replace(s[:strings.LastIndex(s, "m")+1], "h", "h ", 1) 
        },                                                                            
}                                                                                     

如何从template.FuncMap

中定义的模板函数中获取用户IP

1 个答案:

答案 0 :(得分:2)

func map用于辅助函数而不是数据,应该在解析模板之前定义一次,因此这不是一个好的地方。您应该在执行模板时将数据传递给视图。

这样可以更好地适应视图的数据/上下文。例如,如果你使用map [string] interface {}(我使用interface {}的几个地方之一),你可以简单地在那里分配它:

userIP := strings.Split(r.RemoteAddr, ":")[0]
data := map[string]interface{}{"userIP":userIP}
err := tmpl.Execute(w,data)

模板:

<p>User IP:{{.userIP}}</p>