package pongo import ( "fmt" "io" "io/fs" "github.com/flosch/pongo2/v6" ) // fsLoader adapts an fs.FS to pongo2's TemplateLoader interface. type fsLoader struct { fsys fs.FS } func (l *fsLoader) Abs(base, name string) string { return name } func (l *fsLoader) Get(path string) (io.Reader, error) { return l.fsys.Open(path) } // multiLoader chains multiple loaders, returning the first hit. // Plugin templates can {% extends "base.html" %} where base.html // lives in the core embedded FS rather than the plugin FS. type multiLoader struct { loaders []pongo2.TemplateLoader } func (l *multiLoader) Abs(base, name string) string { return name } func (l *multiLoader) Get(path string) (io.Reader, error) { for _, loader := range l.loaders { r, err := loader.Get(path) if err == nil { return r, nil } } return nil, fmt.Errorf("pongo: template %q not found in any loader", path) }