整合CloudyKit/jet实现HTML模板渲染

CloudyKit/jet是一个语法与Go标准包模板引擎的语法相似,并且性能更高的模板引擎,以下是jet包与httpdispatcher整合的示例:

  1. package main
  2.  
  3. import (
  4. "github.com/CloudyKit/jet"
  5. "github.com/dxvgef/httpdispatcher"
  6. "net/http"
  7. "log"
  8. "bytes"
  9. )
  10.  
  11. //渲染引擎实例
  12. var Render *jet.Set
  13.  
  14. //渲染html模板的函数,在需要渲染模板的时候传入参数执行即可
  15. func renderHTML(ctx *httpdispatcher.Context, code int, tmpl string, data jet.VarMap) error {
  16. //加载模板文件
  17. t, err := Render.GetTemplate(tmpl)
  18. if err != nil {
  19. return err
  20. }
  21.  
  22. //创建一个空的bytes.Buffer
  23. w := bytes.NewBuffer([]byte{})
  24. //渲染模板文件并将结果赋值给bytes.Buffer
  25. err = t.Execute(w, data, nil)
  26. if err != nil {
  27. return err
  28. }
  29.  
  30. //设置文档类型
  31. ctx.ResponseWriter.Header().Set("Content-Type", "text/html; charset=UTF-8")
  32. //设置状态码
  33. ctx.ResponseWriter.WriteHeader(code)
  34. //输出html模板渲染之后的内容数据
  35. ctx.ResponseWriter.Write(w.Bytes())
  36. return nil
  37. }
  38.  
  39. func main() {
  40. //获得一个调度器的实例化对象
  41. var dispatcher = httpdispatcher.New()
  42.  
  43. //获得jet引擎的实例并指定模板文件所在的路径
  44. Render = jet.NewHTMLSet("模板文件所在的路径")
  45. //启用jet的开发模式
  46. Render.SetDevelopmentMode(true)
  47.  
  48. //注册路由
  49. dispatcher.Router.GET("/", func(ctx *httpdispatcher.Context) error {
  50. //模板变量赋值
  51. data := make(jet.VarMap)
  52. data.Set("模板变量名", "模板变量值")
  53.  
  54. //渲染模板并将结果返回给httpdispatcher,以决定是否触发500事件
  55. return ctx.Return(renderHTML(ctx, 200, "模板文件名.html", data))
  56. })
  57.  
  58. svr := &http.Server{
  59. Addr: ":8080",
  60. Handler: dispatcher,
  61. }
  62. if err := svr.ListenAndServe(); err != nil {
  63. log.Fatal(err.Error())
  64. }
  65. }