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
},