package ginpongo2 import ( "fmt" "net/http" "strings" "github.com/flosch/pongo2" "github.com/gin-gonic/gin/render" ) var Suffix = ".html.twig" type Pongo struct { set *pongo2.TemplateSet basedir string } func (p *Pongo) Instance(name string, data interface{}) render.Render { r := new(PongoRenderer) tpl, e := p.set.FromCache(fmt.Sprintf("%s%s%s", p.basedir, name, Suffix)) if e != nil { panic(e) } r.tpl = tpl r.data = data return r } type PongoRenderer struct { tpl *pongo2.Template data interface{} } func (r *PongoRenderer) Render(w http.ResponseWriter) error { if r.data == nil { r.data = make(pongo2.Context) } d := r.data.(pongo2.Context) return r.tpl.ExecuteWriter(d, w) } func (r *PongoRenderer) WriteContentType(w http.ResponseWriter) { if v := w.Header().Get("content-type"); len(v) == 0 { w.Header().Set("content-type", "text/html; charset=utf8") } } func New(basedir string, debug bool, loaders ...pongo2.TemplateLoader) *Pongo { p := new(Pongo) p.set = pongo2.NewSet("html") p.set.Debug = debug if !strings.HasSuffix(basedir, "/") { basedir = basedir + "/" } p.basedir = basedir if len(loaders) > 0 { p.set.AddLoader(loaders...) } return p }