/
middleware.go
61 lines (51 loc) · 1.29 KB
/
middleware.go
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
package pongo2gin
import (
"net/http"
"path"
"github.com/flosch/pongo2"
"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,
}
}
//Instance init
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 strcut
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"}
}
}