我写了一个小网站项目,你可以存储链接,我遇到了一个问题:
该网站有许多不同的页面,显示不同的信息,因此您需要传递模板。执行不同类型的结构。但每个页面还需要用户名和标签等信息,这些信息显示在侧栏中。我尝试制作这样的东西,而不是为每个页面制作全新的结构类型。
http://play.golang.org/p/VNfD6i8p_N
type Page interface {
Name() string
}
type GeneralPage struct {
PageName string
}
func (s GeneralPage) Name() string {
return s.PageName
}
type PageRoot struct {
Page
Tags []string
IsLoggedIn bool
Username string
}
type ListPage struct {
Page
Links []Link
IsTagPage bool
Tag string
}
type GalleryPage struct {
Page
Image Link
Next int
Previous int
}
但是当我执行模板时遇到错误:"fp.tmpl" at <.Links>: can't evaluate field Links in type main.Page
发生错误的模板部分:
{{with .Page}}
{{range .Links}}
<tr>
<td>{{if .IsImage}}<img src="{{.Url}}" />{{end}}</td>
<td>{{.Name}}</td>
<td>{{.Url}}</td>
<td>{{.TagsString}}</td>
</tr>
{{end}}
{{end}}
并且{{.Name}}
不起作用。 (这是从GeneralPage嵌入的功能)
答案 0 :(得分:1)
您正在嵌入 Page界面,但您需要的是 GeneralPage 。
也许您可以使用map [string] interface {}来存储数据(然后检查模板中是否为nil),这样更容易。
但您可以共享主要布局,只需更改细节(如母版页)
看http://golang.org/pkg/text/template/#example_Template_share