diff --git a/_examples/view/template_html_5/main.go b/_examples/view/template_html_5/main.go new file mode 100644 index 00000000..9fcc7fdb --- /dev/null +++ b/_examples/view/template_html_5/main.go @@ -0,0 +1,31 @@ +package main + +import ( + "github.com/kataras/iris" +) + +func main() { + app := iris.New() + + app.RegisterView(iris.HTML("./views", ".html").Layout("layout.html")) + // TIP: append .Reload(true) to reload the templates on each request. + + app.Get("/home", func(ctx iris.Context) { + ctx.ViewData("title", "Home page"); + ctx.View("home.html") + // Note that: you can pass "layout" : "otherLayout.html" to bypass the config's Layout property + // or view.NoLayout to disable layout on this render action. + // third is an optional parameter + }) + + app.Get("/about", func(ctx iris.Context) { + ctx.View("about.html") + }) + + app.Get("/user/index", func(ctx iris.Context) { + ctx.View("user/index.html") + }) + + // http://localhost:8080 + app.Run(iris.Addr(":8080")) +} diff --git a/_examples/view/template_html_5/views/about.html b/_examples/view/template_html_5/views/about.html new file mode 100644 index 00000000..a2642992 --- /dev/null +++ b/_examples/view/template_html_5/views/about.html @@ -0,0 +1,15 @@ +{{ define "about-head"}} + about page + +{{ end }} + +{{ define "about-body"}} + extend body content in layout. +{{ end }} +
+ Hello about page +
\ No newline at end of file diff --git a/_examples/view/template_html_5/views/home.html b/_examples/view/template_html_5/views/home.html new file mode 100644 index 00000000..36599009 --- /dev/null +++ b/_examples/view/template_html_5/views/home.html @@ -0,0 +1,11 @@ +{{ define "home-head"}} + {{.title}} + +{{ end }} +
+ Hello home page +
\ No newline at end of file diff --git a/_examples/view/template_html_5/views/layout.html b/_examples/view/template_html_5/views/layout.html new file mode 100644 index 00000000..c374205f --- /dev/null +++ b/_examples/view/template_html_5/views/layout.html @@ -0,0 +1,11 @@ + + +{{ part "head" }} + + +

[layout] Body content is below...

+ {{ part "body" }} + + {{ yield }} + + diff --git a/_examples/view/template_html_5/views/user/index.html b/_examples/view/template_html_5/views/user/index.html new file mode 100644 index 00000000..6c73fb2e --- /dev/null +++ b/_examples/view/template_html_5/views/user/index.html @@ -0,0 +1,10 @@ +{{ define "user/index-head"}} + +{{ end }} +
+ Hello user index page +
\ No newline at end of file diff --git a/view/html.go b/view/html.go index 24bb20ea..2d927ae1 100644 --- a/view/html.go +++ b/view/html.go @@ -44,6 +44,9 @@ var emptyFuncs = template.FuncMap{ "yield": func() (string, error) { return "", fmt.Errorf("yield was called, yet no layout defined") }, + "part": func() (string, error) { + return "", fmt.Errorf("block was called, yet no layout defined") + }, "partial": func() (string, error) { return "", fmt.Errorf("block was called, yet no layout defined") }, @@ -389,6 +392,15 @@ func (s *HTMLEngine) layoutFuncsFor(name string, binding interface{}) { // Return safe HTML here since we are rendering our own template. return template.HTML(buf.String()), err }, + "part": func(partName string) (template.HTML, error) { + nameTemp := strings.Replace(name, ".html", "", -1) + fullPartName := fmt.Sprintf("%s-%s", nameTemp, partName) + buf, err := s.executeTemplateBuf(fullPartName, binding) + if err != nil { + return "", nil + } + return template.HTML(buf.String()), err + }, "current": func() (string, error) { return name, nil },