整合CloudyKit/jet实现HTML模板渲染
CloudyKit/jet
是一个语法与Go标准包模板引擎的语法相似,并且性能更高的模板引擎,以下是jet
包与httpdispatcher
整合的示例:
- package main
- import (
- "github.com/CloudyKit/jet"
- "github.com/dxvgef/httpdispatcher"
- "net/http"
- "log"
- "bytes"
- )
- //渲染引擎实例
- var Render *jet.Set
- //渲染html模板的函数,在需要渲染模板的时候传入参数执行即可
- func renderHTML(ctx *httpdispatcher.Context, code int, tmpl string, data jet.VarMap) error {
- //加载模板文件
- t, err := Render.GetTemplate(tmpl)
- if err != nil {
- return err
- }
- //创建一个空的bytes.Buffer
- w := bytes.NewBuffer([]byte{})
- //渲染模板文件并将结果赋值给bytes.Buffer
- err = t.Execute(w, data, nil)
- if err != nil {
- return err
- }
- //设置文档类型
- ctx.ResponseWriter.Header().Set("Content-Type", "text/html; charset=UTF-8")
- //设置状态码
- ctx.ResponseWriter.WriteHeader(code)
- //输出html模板渲染之后的内容数据
- ctx.ResponseWriter.Write(w.Bytes())
- return nil
- }
- func main() {
- //获得一个调度器的实例化对象
- var dispatcher = httpdispatcher.New()
- //获得jet引擎的实例并指定模板文件所在的路径
- Render = jet.NewHTMLSet("模板文件所在的路径")
- //启用jet的开发模式
- Render.SetDevelopmentMode(true)
- //注册路由
- dispatcher.Router.GET("/", func(ctx *httpdispatcher.Context) error {
- //模板变量赋值
- data := make(jet.VarMap)
- data.Set("模板变量名", "模板变量值")
- //渲染模板并将结果返回给httpdispatcher,以决定是否触发500事件
- return ctx.Return(renderHTML(ctx, 200, "模板文件名.html", data))
- })
- svr := &http.Server{
- Addr: ":8080",
- Handler: dispatcher,
- }
- if err := svr.ListenAndServe(); err != nil {
- log.Fatal(err.Error())
- }
- }