Merge pull request #1117 from chenPengXu/master

add part function in html.go and examples

Former-commit-id: bf22aac2abd6cf605abb1673ec346301c6c630c2
This commit is contained in:
Gerasimos (Makis) Maropoulos 2018-10-30 01:05:33 +02:00 committed by GitHub
commit d6964acfcd
6 changed files with 90 additions and 0 deletions

View File

@ -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"))
}

View File

@ -0,0 +1,15 @@
{{ define "about-head"}}
<title>about page</title>
<style type="text/css">
body {
background: #666;
}
</style>
{{ end }}
{{ define "about-body"}}
extend body content in layout.
{{ end }}
<div>
Hello about page
</div>

View File

@ -0,0 +1,11 @@
{{ define "home-head"}}
<title>{{.title}}</title>
<style type="text/css">
body {
background: #999;
}
</style>
{{ end }}
<div>
Hello home page
</div>

View File

@ -0,0 +1,11 @@
<html>
<head>
{{ part "head" }}
</head>
<body>
<h1>[layout] Body content is below...</h1>
{{ part "body" }}
<!-- Render the current template here -->
{{ yield }}
</body>
</html>

View File

@ -0,0 +1,10 @@
{{ define "user/index-head"}}
<style type="text/css">
body {
background: red;
}
</style>
{{ end }}
<div>
Hello user index page
</div>

View File

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