golang-webapp/controller/html_renderer.go
2021-05-27 21:14:56 +02:00

61 lines
1.3 KiB
Go

package controller
import (
"net/http"
"path"
"github.com/flosch/pongo2/v4"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/render"
)
//pongoRender struct init
type pongoRender struct {
TmplDir string
}
//templatePath html files path
func templatePath(tmplDir string) *pongoRender {
return &pongoRender{
TmplDir: tmplDir,
}
}
func (p *pongoRender) Instance(name string, data interface{}) render.Render {
var template *pongo2.Template
fileName := path.Join(p.TmplDir, name)
if gin.Mode() == gin.DebugMode {
template = pongo2.Must(pongo2.FromFile(fileName))
} else {
template = pongo2.Must(pongo2.FromCache(fileName))
}
return &PongoHTML{
Template: template,
Name: name,
Data: data.(pongo2.Context),
}
}
//PongoHTML struct
type PongoHTML struct {
Template *pongo2.Template
Name string
Data pongo2.Context
}
//Render for gin interface render override
func (p *PongoHTML) Render(w http.ResponseWriter) error {
p.WriteContentType(w)
return p.Template.ExecuteWriter(p.Data, w)
}
//WriteContentType for gin interface WriteContentType override
func (p *PongoHTML) WriteContentType(w http.ResponseWriter) {
header := w.Header()
if val := header["Content-Type"]; len(val) == 0 {
header["Content-Type"] = []string{"text/html; charset=utf-8"}
}
}