package template import ( "errors" "io" "github.com/GeertJohan/go.rice" "github.com/flosch/pongo2" _ "github.com/flosch/pongo2-addons" ) const DefaultExtension = ".html.twig" type loader struct { ricebox *rice.Box } func (loader) Abs(base, name string) string { return name } func (l loader) Get(path string) (io.Reader, error) { return l.ricebox.Open(path) } func New(debug bool) *Renderer { l := loader{ ricebox: rice.MustFindBox("views"), } set := pongo2.NewSet("wiki", l) set.Debug = debug return &Renderer{ set: set, } } type Renderer struct { set *pongo2.TemplateSet } func (r *Renderer) Render(w io.Writer, name string, data interface{}) error { t ,e := r.set.FromCache(name+DefaultExtension) if e != nil { return e } ctx, ok := data.(map[string]interface{}) if !ok { if data != nil { return errors.New("data is not compatible with map[string]interface{}") } } return t.ExecuteWriter(ctx, w) }