html/template多layout,不能自动渲染的问题!

mia0x75 · · 1043 次点击
你这样想必应该也是没有问题的,不过我不想搞这样的配置。我的目录结构很清楚了 ``` └── templates ├── layouts │ ├── default.html │ └── single.html ├── partials │ ├── footer.html │ └── header.html └── views ├── login.html └── index.html ``` 程序启动时,自动递归扫描views下所有的.html文件(模板),对于每一个文件,都和layouts/partials里面的文件合并成一个数组,这个就好像你的JSON配置。 我现在的问题是,如果layout有多个就会出现问题。这样说能明白吗?
#8
更多评论
polaris
社区,需要你我一同完善!
每个页面负责传递自己对应的 view 部分 html 文件,用于第二个参数吧
#1
t.ExecuteTemplate(w, "single", nil) 第二个参数使用当前页面的相对路径,且包含子目录,对上面的代码好像是可以,但是不能获取从代码传过来的数据。 改造: index.html ``` {{ template "default" }} {{ define "content" }} <div>默认页面</div> <div>{{ . }} </div> {{ end }} ``` login.html ``` {{ template "single" }} {{ define "content" }} <div>登录页面</div> <div>{{ . }} </div> {{ end }} ``` 简化partials部分的index ``` func home(w http.ResponseWriter, r *http.Request) { t, err := template.ParseFiles("templates/views/index.html", "templates/layouts/single.html", "templates/layouts/default.html") if err != nil { fmt.Println(err) } t.ExecuteTemplate(w, "default", &map[string]interface{}{ "key1": "value1", }) } ``` 第二个参数是default,浏览器显示 ``` 默认页面 map[key1:value1] ``` 第二个参数是index或者index.html,浏览器显示 ``` 默认页面 ```
#2