golang 中模板实现公用头部和尾部
2018年8月11日
本文只是一种实现方式,效率不是最高,但好在简单!还有很多其他方式,另行探讨!
开发网站功能时候,很多时候,都有公共的头尾,有个公共头尾我们就不用重复书写相同的部分,网站开发中还是非常常见的!如果实现这个功能我们就需要用到了模板的东西!golang的模板语法实话使用起来感觉有点难用!还需要不断的摩擦才可以适应!
golang中用到的模板是html/template!
下边我们简单介绍一下代码!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
//tpl你是要用的模板!data 是你传递给模板的数据 func LoadView(w http.ResponseWriter, tpl string, data map[interface{}]interface{}) { //这里是默认在view目录 view_path := "views" kz := "" //data中可以引入多个模板,字段是templ,在调用出加入 if templ, ok := data["templ"]; ok { kz = "/" + templ.(string) + ".html" } //一个页面中用到的模板,包含头部和尾部 h := []string{ view_path + "/layout/header.html", view_path + "/" + tpl + ".html", view_path + "/layout/footer.html", } if kz != "" { h = append(h, view_path+kz) } var t *template.Template var e error //用与区分测试与正式环境 if !config.Debug { hs := "" for _, v := range h { v = strings.Replace(v, view_path, "", -1) f1, err := statikView.GetData(v) if err != nil { w.Write([]byte(v + err.Error())) return } hs += string(f1) } t, e = template.New("ss").Funcs(template.FuncMap{"unescaped": unescaped}).Parse(hs) } else { t, e = template.New("ss").Funcs(template.FuncMap{"unescaped": unescaped}).ParseFiles(h...) if e != nil { http.Error(w, "解析文件错误", 1) fmt.Println(e) return } } if data == nil { data = make(map[interface{}]interface{}) } //标题 title := "z-ab" if _, ok := data["title"]; ok { data["title"] = data["title"].(string) + title } else { data["title"] = title } //是否加载右侧边栏,通过这个变量在页面中是否展示 if v, ok := data["right"]; !ok || v != 1 { data["right"] = 0 } if v, ok := data["newheader"]; !ok || v != 1 { data["newheader"] = 0 } tpl_file := strings.Split(tpl, "/") e1 := t.ExecuteTemplate(w, "header", data) e2 := t.ExecuteTemplate(w, tpl_file[len(tpl_file)-1], data) e3 := t.ExecuteTemplate(w, "footer", data) if e1 != nil || e2 != nil || e3 != nil { fmt.Println("模版获取问题:" + e1.Error() + "," + e2.Error() + "," + e3.Error()) } } |