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

mia0x75 · · 1044 次点击
这输出,蛋疼了。 以我自己的代码为例,我是这样处理的 每个view一个结构,然后用一个map放在配置文件里 这是views的配置文件 ![Screenshot_20180904_164429.png](https://static.studygolang.com/180904/1d96bae847396b941bbb7f6b6ddba981.png) 实际的渲染和编译过的视图大概是这样的 ![Screenshot_20180904_164906.png](https://static.studygolang.com/180904/235e5d819167e0d51076a401d009895f.png) 为了能自动补全,再view的初始化代码里直接存进package的变量 ![Screenshot_20180904_165059.png](https://static.studygolang.com/180904/42156938060e84ca102d5e0d98e11c7f.png) 控制器里输出大概是这样的![Screenshot_20180904_165338.png](https://static.studygolang.com/180904/e9cd57fbfd7768ab5412540be9848879.png)
#5
更多评论
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