mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 13:10:54 +00:00
fix #260
This commit is contained in:
parent
4bcbc588fc
commit
c6167ef184
37
template.go
37
template.go
@ -133,8 +133,16 @@ func BuildTemplate(dir string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTplDeep(root, file string, t *template.Template) (*template.Template, [][]string, error) {
|
func getTplDeep(root, file, parent string, t *template.Template) (*template.Template, [][]string, error) {
|
||||||
fileabspath := filepath.Join(root, file)
|
var fileabspath string
|
||||||
|
if filepath.HasPrefix(file, "../") {
|
||||||
|
fileabspath = filepath.Join(root, filepath.Dir(parent), file)
|
||||||
|
} else {
|
||||||
|
fileabspath = filepath.Join(root, file)
|
||||||
|
}
|
||||||
|
if e, _ := FileExists(fileabspath); !e {
|
||||||
|
panic("can't find template file" + file)
|
||||||
|
}
|
||||||
data, err := ioutil.ReadFile(fileabspath)
|
data, err := ioutil.ReadFile(fileabspath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, [][]string{}, err
|
return nil, [][]string{}, err
|
||||||
@ -154,23 +162,10 @@ func getTplDeep(root, file string, t *template.Template) (*template.Template, []
|
|||||||
if !HasTemplateEXt(m[1]) {
|
if !HasTemplateEXt(m[1]) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if e, _ := FileExists(filepath.Join(root, m[1])); e {
|
t, _, err = getTplDeep(root, m[1], file, t)
|
||||||
t, _, err = getTplDeep(root, m[1], t)
|
if err != nil {
|
||||||
if err != nil {
|
return nil, [][]string{}, err
|
||||||
return nil, [][]string{}, err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
relativefile := filepath.Join(filepath.Dir(file), m[1])
|
|
||||||
if e, _ := FileExists(relativefile); e {
|
|
||||||
t, _, err = getTplDeep(root, relativefile, t)
|
|
||||||
if err != nil {
|
|
||||||
return nil, [][]string{}, err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
panic("can't find template file" + m[1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return t, allsub, nil
|
return t, allsub, nil
|
||||||
@ -179,7 +174,7 @@ func getTplDeep(root, file string, t *template.Template) (*template.Template, []
|
|||||||
func getTemplate(root, file string, others ...string) (t *template.Template, err error) {
|
func getTemplate(root, file string, others ...string) (t *template.Template, err error) {
|
||||||
t = template.New(file).Delims(TemplateLeft, TemplateRight).Funcs(beegoTplFuncMap)
|
t = template.New(file).Delims(TemplateLeft, TemplateRight).Funcs(beegoTplFuncMap)
|
||||||
var submods [][]string
|
var submods [][]string
|
||||||
t, submods, err = getTplDeep(root, file, t)
|
t, submods, err = getTplDeep(root, file, "", t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -203,7 +198,7 @@ func _getTemplate(t0 *template.Template, root string, submods [][]string, others
|
|||||||
for _, otherfile := range others {
|
for _, otherfile := range others {
|
||||||
if otherfile == m[1] {
|
if otherfile == m[1] {
|
||||||
var submods1 [][]string
|
var submods1 [][]string
|
||||||
t, submods1, err = getTplDeep(root, otherfile, t)
|
t, submods1, err = getTplDeep(root, otherfile, "", t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Trace("template parse file err:", err)
|
Trace("template parse file err:", err)
|
||||||
} else if submods1 != nil && len(submods1) > 0 {
|
} else if submods1 != nil && len(submods1) > 0 {
|
||||||
@ -224,7 +219,7 @@ func _getTemplate(t0 *template.Template, root string, submods [][]string, others
|
|||||||
for _, sub := range allsub {
|
for _, sub := range allsub {
|
||||||
if len(sub) == 2 && sub[1] == m[1] {
|
if len(sub) == 2 && sub[1] == m[1] {
|
||||||
var submods1 [][]string
|
var submods1 [][]string
|
||||||
t, submods1, err = getTplDeep(root, otherfile, t)
|
t, submods1, err = getTplDeep(root, otherfile, "", t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Trace("template parse file err:", err)
|
Trace("template parse file err:", err)
|
||||||
} else if submods1 != nil && len(submods1) > 0 {
|
} else if submods1 != nil && len(submods1) > 0 {
|
||||||
|
@ -67,3 +67,56 @@ func TestTemplate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
os.RemoveAll(dir)
|
os.RemoveAll(dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var menu string = `<div class="menu">
|
||||||
|
<ul>
|
||||||
|
<li>menu1</li>
|
||||||
|
<li>menu2</li>
|
||||||
|
<li>menu3</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
var user string = `<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>beego welcome template</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{{template "../public/menu.tpl"}}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`
|
||||||
|
|
||||||
|
func TestRelativeTemplate(t *testing.T) {
|
||||||
|
dir := "_beeTmp"
|
||||||
|
files := []string{
|
||||||
|
"easyui/public/menu.tpl",
|
||||||
|
"easyui/rbac/user.tpl",
|
||||||
|
}
|
||||||
|
if err := os.MkdirAll(dir, 0777); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
for k, name := range files {
|
||||||
|
os.MkdirAll(filepath.Dir(filepath.Join(dir, name)), 0777)
|
||||||
|
if f, err := os.Create(filepath.Join(dir, name)); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else {
|
||||||
|
if k == 0 {
|
||||||
|
f.WriteString(menu)
|
||||||
|
} else if k == 1 {
|
||||||
|
f.WriteString(user)
|
||||||
|
}
|
||||||
|
f.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := BuildTemplate(dir); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if err := BeeTemplates["easyui/rbac/user.tpl"].ExecuteTemplate(os.Stdout, "easyui/rbac/user.tpl", nil); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
for _, name := range files {
|
||||||
|
os.RemoveAll(filepath.Join(dir, name))
|
||||||
|
}
|
||||||
|
os.RemoveAll(dir)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user