1
0
mirror of https://github.com/astaxie/beego.git synced 2024-11-26 03:01:28 +00:00

Merge remote-tracking branch 'astaxie/master'

This commit is contained in:
傅小黑 2013-12-24 21:09:17 +08:00
commit 053e7a6aa6
2 changed files with 32 additions and 8 deletions

View File

@ -38,6 +38,7 @@ type Controller struct {
actionName string actionName string
TplNames string TplNames string
Layout string Layout string
LayoutSections map[string]string // the key is the section name and the value is the template name
TplExt string TplExt string
_xsrf_token string _xsrf_token string
gotofunc string gotofunc string
@ -161,6 +162,25 @@ func (c *Controller) RenderBytes() ([]byte, error) {
} }
tplcontent, _ := ioutil.ReadAll(newbytes) tplcontent, _ := ioutil.ReadAll(newbytes)
c.Data["LayoutContent"] = template.HTML(string(tplcontent)) c.Data["LayoutContent"] = template.HTML(string(tplcontent))
if c.LayoutSections != nil {
for sectionName, sectionTpl := range c.LayoutSections {
if (sectionTpl == "") {
c.Data[sectionName] = ""
continue
}
sectionBytes := bytes.NewBufferString("")
err = BeeTemplates[sectionTpl].ExecuteTemplate(sectionBytes, sectionTpl, c.Data)
if err != nil {
Trace("template Execute err:", err)
return nil, err
}
sectionContent, _ := ioutil.ReadAll(sectionBytes)
c.Data[sectionName] = template.HTML(string(sectionContent))
}
}
ibytes := bytes.NewBufferString("") ibytes := bytes.NewBufferString("")
err = BeeTemplates[c.Layout].ExecuteTemplate(ibytes, c.Layout, c.Data) err = BeeTemplates[c.Layout].ExecuteTemplate(ibytes, c.Layout, c.Data)
if err != nil { if err != nil {

View File

@ -566,11 +566,13 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request)
for _, route := range p.fixrouters { for _, route := range p.fixrouters {
n := len(requestPath) n := len(requestPath)
if requestPath == route.pattern { if requestPath == route.pattern {
runMethod = p.getRunMethod(r.Method, context, route)
if runMethod != "" {
runrouter = route.controllerType runrouter = route.controllerType
findrouter = true findrouter = true
runMethod = p.getRunMethod(r.Method, context, route)
break break
} }
}
// pattern /admin url /admin 200 /admin/ 404 // pattern /admin url /admin 200 /admin/ 404
// pattern /admin/ url /admin 301 /admin/ 200 // pattern /admin/ url /admin 301 /admin/ 200
if requestPath[n-1] != '/' && len(route.pattern) == n+1 && if requestPath[n-1] != '/' && len(route.pattern) == n+1 &&
@ -608,13 +610,15 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request)
//reassemble query params and add to RawQuery //reassemble query params and add to RawQuery
r.URL.RawQuery = url.Values(values).Encode() r.URL.RawQuery = url.Values(values).Encode()
} }
runrouter = route.controllerType
findrouter = true
context.Input.Params = params
runMethod = p.getRunMethod(r.Method, context, route) runMethod = p.getRunMethod(r.Method, context, route)
if runMethod != "" {
runrouter = route.controllerType
context.Input.Params = params
findrouter = true
break break
} }
} }
}
if !findrouter && p.enableAuto { if !findrouter && p.enableAuto {
// deal with url with diffirent ext // deal with url with diffirent ext
@ -798,7 +802,7 @@ func (p *ControllerRegistor) getRunMethod(method string, context *beecontext.Con
} else if m, ok = router.methods["*"]; ok { } else if m, ok = router.methods["*"]; ok {
return m return m
} else { } else {
return strings.Title(method) return ""
} }
} else { } else {
return strings.Title(method) return strings.Title(method)