Documentation ¶
Overview ¶
Package easytpl is a simple template renderer based on the `html/template`, but much simpler to use.
Source code and other details for the project are available at GitHub:
https://github.com/gookit/easytpl
Usage please see example and README.
Example ¶
package main import ( "bytes" "fmt" "github.com/gookit/easytpl" ) func main() { // equals to call: easytpl.NewRenderer() + r.MustInit() r := easytpl.NewInited(func(r *easytpl.Renderer) { // setting default layout r.Layout = "layout" // equals to "layout.tpl" // root dir. will autoload on init. r.ViewsDir = "testdata/layouts" }) // fmt.Println(r.TemplateNames(true)) bf := new(bytes.Buffer) // render template string _ = r.String(bf, `hello {{.}}`, "tom") fmt.Print(bf.String()) // hello tom // render template without layout _ = r.Partial(bf, "home", "tom") bf.Reset() // render with default layout _ = r.Render(bf, "home", "tom") bf.Reset() // render with custom layout _ = r.Render(bf, "home", "tom", "site/layout") bf.Reset() // load named template string r.LoadString("my-page", "welcome {{.}}") // now, you can use "my-page" as a template name _ = r.Partial(bf, "my-page", "tom") // welcome tom bf.Reset() // more ways for load root r.LoadByGlob("some/path/*", "some/path") r.LoadFiles("path/file1.tpl", "path/file2.tpl") }
Output:
Example (Extends) ¶
package main import ( "fmt" "os" "github.com/gookit/easytpl" ) func main() { r := easytpl.NewExtends() // load root r.LoadStrings(map[string]string{ // layout template file "layout.tpl": `{{ block "header" . }}header{{ end }} {{ block "body" . }}default{{ end }} {{ block "footer" . }}footer{{ end }}`, // current page template "home.tpl": `{{ extends "layout.tpl" }} {{ define "body" }}hello {{.}}{{ end }}`, }) fmt.Println("- render 'layout.tpl'") err := r.Execute(os.Stdout, "layout.tpl", "inhere") if err != nil { panic(err) } fmt.Println("\n- render 'home.tpl'") err = r.Execute(os.Stdout, "home.tpl", "inhere") if err != nil { panic(err) } }
Output: - render 'layout.tpl' header default footer - render 'home.tpl' header hello inhere footer
Index ¶
- Constants
- func AddFunc(name string, fn any)
- func AddFuncMap(fm template.FuncMap)
- func DisableLayout(r *Renderer)
- func EnableExtends(r *Renderer)
- func Execute(w io.Writer, tplName string, v any) error
- func Initialize(fns ...OptionFn)
- func LoadByGlob(pattern string, baseDirs ...string)
- func LoadFiles(files ...string)
- func LoadString(tplName string, tplString string)
- func LoadStrings(sMap map[string]string)
- func Partial(w io.Writer, tplName string, v any) error
- func Render(w io.Writer, tplName string, v any, layout ...string) error
- func Reset()
- func Revert()
- func String(w io.Writer, tplStr string, v any) error
- func WithDebug(r *Renderer)
- type M
- type OptionFn
- type Options
- type Renderer
- func (r *Renderer) AddFunc(name string, fn any)
- func (r *Renderer) AddFuncMap(fm template.FuncMap)
- func (r *Renderer) Execute(w io.Writer, tplName string, v any) (err error)
- func (r *Renderer) Init() error
- func (r *Renderer) Initialize() error
- func (r *Renderer) IsValidExt(ext string) bool
- func (r *Renderer) LoadByGlob(pattern string, baseDirs ...string)
- func (r *Renderer) LoadBytes(tplName string, tplText []byte)
- func (r *Renderer) LoadFile(tplName, filePath string)
- func (r *Renderer) LoadFiles(files ...string)
- func (r *Renderer) LoadString(tplName, tplText string)
- func (r *Renderer) LoadStrings(sMap map[string]string)
- func (r *Renderer) MustInit() *Renderer
- func (r *Renderer) MustInitialize()deprecated
- func (r *Renderer) Partial(w io.Writer, tplName string, v any) error
- func (r *Renderer) Render(w io.Writer, tplName string, v any, layout ...string) error
- func (r *Renderer) Root() *template.Template
- func (r *Renderer) String(w io.Writer, tplText string, v any) error
- func (r *Renderer) Template(name string) *template.Template
- func (r *Renderer) TemplateFiles() map[string]string
- func (r *Renderer) TemplateNames(pretty ...bool) string
- func (r *Renderer) Templates() []*template.Template
- func (r *Renderer) WithOptions(fns ...OptionFn) *Renderer
- type TplDelims
Examples ¶
Constants ¶
const DefaultExt = ".tpl"
DefaultExt name
const DefaultExt1 = ".tmpl"
Variables ¶
This section is empty.
Functions ¶
func AddFuncMap ¶ added in v1.1.0
AddFuncMap add template func map
func DisableLayout ¶ added in v1.1.0
func DisableLayout(r *Renderer)
DisableLayout disable the layout template.
func EnableExtends ¶ added in v1.1.0
func EnableExtends(r *Renderer)
EnableExtends enable extends feature.
func Initialize ¶ added in v1.1.0
func Initialize(fns ...OptionFn)
Initialize the default instance with config func
func LoadByGlob ¶ added in v1.1.0
LoadByGlob load templates by glob pattern.
func LoadFiles ¶ added in v1.1.0
func LoadFiles(files ...string)
LoadFiles load custom template files.
func LoadString ¶ added in v1.1.0
LoadString load named template string.
func LoadStrings ¶ added in v1.1.0
LoadStrings load multi named template strings
Types ¶
type OptionFn ¶ added in v1.1.0
type OptionFn func(r *Renderer)
OptionFn for renderer
func WithLayout ¶ added in v1.1.0
WithLayout set the layout template name.
func WithTplDirs ¶ added in v1.1.0
WithTplDirs set template dirs
func WithViewDirs ¶ added in v1.1.0
WithViewDirs set template dirs, alias of WithTplDirs()
type Options ¶ added in v1.1.0
type Options struct { // Debug mode for development. Debug bool // Delims define for template. default is "{{", "}}" Delims TplDelims // ViewsDir the default views directory, multi dirs use "," split ViewsDir string // ExtNames supported template extensions, without dot prefix. eg {"tpl", "html"} ExtNames []string // FuncMap func map for template FuncMap template.FuncMap // Layout template name for default. Layout string // DisableLayout disable apply layout render. default is False DisableLayout bool // EnableExtends enable extends feature. default is False EnableExtends bool // ExtendsBase template file map. available when extends feature is enabled. // - Key is tpl name, value is base tpl file path. // // Example: // {"base": "/path/to/base.tpl"} // Use on template page.tpl: // {{ extends "base" }} // {{ define "body" }} ... {{ end }} ExtendsBase map[string]string // AutoSearchFile // TODO: auto search template file, when not found on compiled templates. default is False AutoSearchFile bool }
Options for renderer
type Renderer ¶
type Renderer struct { Options // contains filtered or unexported fields }
Renderer definition
func NewExtends ¶ added in v1.1.0
NewExtends create a new and initialized template renderer. default enable extends feature.
func NewInited ¶ added in v1.1.0
NewInited create a new and initialized template renderer. alias of NewInitialized()
func NewInitialized ¶
NewInitialized create a new and initialized view renderer.
func NewRenderer ¶
NewRenderer create a new view renderer
func (*Renderer) AddFuncMap ¶
AddFuncMap add template func map
func (*Renderer) Init ¶ added in v1.1.0
Init Initialize templates in the viewsDir, add do some prepare works.
Notice: must call it on after create Renderer
func (*Renderer) Initialize ¶
Initialize templates in the viewsDir, add do some prepare works.
Notice: must call it on after create Renderer
func (*Renderer) IsValidExt ¶
IsValidExt check is valid ext name
func (*Renderer) LoadByGlob ¶
LoadByGlob load templates by glob pattern. will panic on error
Usage:
r.LoadByGlob("views/*") r.LoadByGlob("views/*", "views") // register template will remove prefix "views" r.LoadByGlob("views/*.tpl") // add ext limit r.LoadByGlob("views/**/*") // all sub-dir files
func (*Renderer) LoadBytes ¶ added in v1.1.0
LoadBytes load named template bytes. will panic on error
func (*Renderer) LoadFiles ¶
LoadFiles load custom template files.
Usage:
r.LoadFiles("path/file1.tpl", "path/file2.tpl")
func (*Renderer) LoadString ¶
LoadString load named template string. will panic on error
Usage:
r.LoadString("my-page", "welcome {{.}}") // now, you can use "my-page" as a template name r.Partial(w, "my-page", "tom") // Result: "welcome tom"
func (*Renderer) LoadStrings ¶
LoadStrings load multi named template strings. key is template name, value is template contents.
func (*Renderer) MustInitialize
deprecated
func (r *Renderer) MustInitialize()
MustInitialize compile templates and report error
Deprecated: please use MustInit, will remove this method in the future
func (*Renderer) Render ¶
Render a template name/file and write to the Writer.
Usage:
renderer := easytpl.NewRenderer() // ... ... // will apply global layout setting renderer.Render(http.ResponseWriter, "user/login", data) // apply custom layout file renderer.Render(http.ResponseWriter, "user/login", data, "custom-layout") // will disable apply layout render renderer.Render(http.ResponseWriter, "user/login", data, "")
func (*Renderer) TemplateFiles ¶
TemplateFiles returns loaded template files
func (*Renderer) TemplateNames ¶
TemplateNames returns loaded template names.
return string like: "tpl1, tpl2, tpl3"
func (*Renderer) WithOptions ¶ added in v1.1.0
WithOptions apply config functions