这是该应用程序的示例。基本代码在:golang-code / handler / handler.go中(在主题之后应显示一个ID!)我试图在Google Appengine上的Golang中建立一个小型博客系统,并使用Mustache作为模板引擎。所以,我有一个结构:type Blogposts struct { PostTitle string PostPreview string Content string Creator string Date time.Time}数据通过传递给GAE datastore.Put(c, datastore.NewIncompleteKey(c, "Blogposts", nil), &blogposts)因此,GAE自动分配一个intID(int64)。现在我试图获得最新的博客文章// Get the latest blogpostsc := appengine.NewContext(r)q := datastore.NewQuery("Blogposts").Order("-Date").Limit(10)var blogposts []Blogposts_, err := q.GetAll(c, &blogposts)直到那里一切正常,但是当我尝试访问intID(或stringID,无论如何)时,我无权访问此:-(<h3><a href="/blog/read/{{{intID}}}">{{{PostTitle}}}</a></h3>(PostTitle起作用,intID不起作用,我已经尝试了数千种东西,没有任何作用:-()有人有主意吗?太好了!编辑:我用胡子。http://mustache.github.com/在代码中,我使用:x["Blogposts"] = blogpostsdata := mustache.RenderFile("templates/about.mustache", x)sendData(w, data) // Equivalent to fmt.Fprintf然后可以使用{{{Content}}}或{{{PostTitle}}}等在.mustache模板中访问数据。
3 回答
小唯快跑啊
TA贡献1863条经验 获得超2个赞
intID 是Key的内部属性,而不是struct,可以通过getter进行访问:
id := key.IntID()
GetAll返回[]*Key,您没有使用它:
_, err := q.GetAll(c, &blogposts)
解决此问题的一种方法是创建一个既包含帖子信息又包含关键信息的viewmodel结构(未经测试,但这是要点):
//... handler code ...
keys, err := q.GetAll(c, &blogposts)
if err != nil {
http.Error(w, "Problem fetching posts.", http.StatusInternalServerError)
return
}
models := make([]BlogPostVM, len(blogposts))
for i := 0; i < len(blogposts); i++ {
models[i].Id = keys[i].IntID()
models[i].Title = blogposts[i].Title
models[i].Content = blogposts[i].Content
}
//... render with mustache ...
}
type BlogPostVM struct {
Id int
Title string
Content string
}
- 3 回答
- 0 关注
- 181 浏览
添加回答
举报
0/150
提交
取消