html/template
html/template
html/templatetext/template.tpl.htmljadeacehtml/templatehtml/templatehtml/template
package main
import (
"html/template"
)
type User struct {
Name string
}
func main() {
t := template.New("template example")
t, _ = t.Parse("hello {{.Name}}!")
p := User{Name: "jjz"}
t.Execute(os.Stdout, p)
}
hello jjzParse()Execute(){{}}{{. Name}}Beegoviewstemplate.Templatebeego.AddTemplateEngine
AddTemplateEngine
beego.AddTemplateEnginetemplate.Templateviewstemplate.Templatetemplate.Template
jade.go
jade.go
go get github.com/Joker/jade
jade.go
func main() {
tpl, err := jade.Parse("name_of_tpl", "doctype 5: html: body: p Hello world!")
if err != nil {
return
}
fmt.Printf( "%s", tpl )
}
输出字符串:
<!DOCTYPE html>
<html>
<body>
<p>Hello world!</p>
</body>
</html>
jade.gojade.go
func addJadeTemplate() {
beego.AddTemplateEngine("jade", func(root, path string, funcs template.FuncMap) (*template.Template, error) {
jadePath := filepath.Join(root, path)
content, err := utils.ReadFile(jadePath)
fmt.Println(content)
if err != nil {
return nil, fmt.Errorf("error loading jade template: %v", err)
}
tpl, err := jade.Parse("name_of_tpl", content)
if err != nil {
return nil, fmt.Errorf("error loading jade template: %v", err)
}
fmt.Println("html:\n%s",tpl)
tmp := template.New("Person template")
tmp, err = tmp.Parse(tpl)
if err != nil {
return nil, fmt.Errorf("error loading jade template: %v", err)
}
fmt.Println(tmp)
return tmp, err
})
}
jade.go
func ReadFile(path string) (str string, err error) {
fi, err := os.Open(path)
defer fi.Close()
fd, err := ioutil.ReadAll(fi)
str = string(fd)
return
}
template.TemplateTemplate.Parse()main()Beego
jade模板的使用
home.jade
doctype html
html
head
title pageTitle
body
h1 jade
.content {{.content}}
{{.content}}Controller
func (c *MainController) Jade() {
c.Data["content"] = "this is jade template"
c.TplName = "home.jade"
}
运行之后生成的页面代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>pageTitle</title>
</head>
<body>
<h1>jade</h1>
<div class="content">this is jade template</div>
</body>
</html>
通过添加一个解析模板的引擎就可以在beego中使用jade的模板,beego从1.7.0之后开始支持复杂的模板引擎,不仅仅是对于jade的支持,也包括对于其他模板引擎的支持。
除了jade之外,在这个PR中推荐使用的是aceHTML模板引擎。
ace
ace模板Jadeace
go get github.com/yosssi/ace
在main函数中添加ace模板解析引擎:
func addAceTemplate() {
beego.AddTemplateEngine("ace", func(root, path string, funcs template.FuncMap) (*template.Template, error) {
aceOptions := &ace.Options{DynamicReload: true, FuncMap: funcs}
aceBasePath := filepath.Join(root, "base")
aceInnerPath := filepath.Join(root, strings.TrimSuffix(path, ".ace"))
tpl, err := ace.Load(aceBasePath, aceInnerPath, aceOptions)
if err != nil {
return nil, fmt.Errorf("error loading ace template: %v", err)
}
return tpl, nil
})
}
base.aceace.Load()template.Templatehome.ace
= doctype html
html lang=en
head
meta charset=utf-8
title Base and Inner Template
body
h1 ace
.content {{.content}}
controller
func (c *MainController)Ace() {
c.Data["content"] = "this is ace template"
c.TplName = "home.ace"
}