template service: add Render() method
This commit is contained in:
parent
42aba649c8
commit
636b2dbf8f
|
@ -1,6 +1,7 @@
|
||||||
package template
|
package template
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
@ -13,6 +14,7 @@ const ServiceName service.Name = "template"
|
||||||
// Service is a templating service
|
// Service is a templating service
|
||||||
type Service interface {
|
type Service interface {
|
||||||
RenderPage(w http.ResponseWriter, templateName string, data interface{}) error
|
RenderPage(w http.ResponseWriter, templateName string, data interface{}) error
|
||||||
|
Render(w io.Writer, templateName string, data interface{}) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// From retrieves the template service in the given container
|
// From retrieves the template service in the given container
|
||||||
|
|
|
@ -3,6 +3,7 @@ package html
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -102,6 +103,28 @@ func (t *TemplateService) RenderPage(w http.ResponseWriter, templateName string,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Render renders a template to the given io.Writer
|
||||||
|
func (t *TemplateService) Render(w io.Writer, templateName string, data interface{}) error {
|
||||||
|
|
||||||
|
// Ensure the template exists in the map.
|
||||||
|
tmpl, ok := t.templates[templateName]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("the template '%s' does not exist", templateName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a buffer to temporarily write to and check if any errors were encountered.
|
||||||
|
buf := t.pool.Get()
|
||||||
|
defer t.pool.Put(buf)
|
||||||
|
|
||||||
|
if err := tmpl.ExecuteTemplate(buf, templateName, data); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := buf.WriteTo(w)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// NewTemplateService returns a new Service
|
// NewTemplateService returns a new Service
|
||||||
func NewTemplateService(funcs ...OptionFunc) *TemplateService {
|
func NewTemplateService(funcs ...OptionFunc) *TemplateService {
|
||||||
options := defaultOptions()
|
options := defaultOptions()
|
||||||
|
|
Loading…
Reference in New Issue