Golang GAE-胡子中struct的intID

这是该应用程序的示例。基本代码在: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 blogposts

c := 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"] = blogposts

data := mustache.RenderFile("templates/about.mustache", x)

sendData(w, data) // Equivalent to fmt.Fprintf

然后可以使用{{{Content}}}或{{{PostTitle}}}等在.mustache模板中访问数据。


呼啦一阵风
浏览 182回答 3
3回答

小唯快跑啊

intID 是Key的内部属性,而不是struct,可以通过getter进行访问:id := key.IntID()GetAll返回[]*Key,您没有使用它:_, err := q.GetAll(c, &blogposts)解决此问题的一种方法是创建一个既包含帖子信息又包含关键信息的viewmodel结构(未经测试,但这是要点):&nbsp; //... handler code ...&nbsp; keys, err := q.GetAll(c, &blogposts)&nbsp; if err != nil {&nbsp; &nbsp; http.Error(w, "Problem fetching posts.", http.StatusInternalServerError)&nbsp; &nbsp; return&nbsp; }&nbsp; models := make([]BlogPostVM, len(blogposts))&nbsp; for i := 0; i < len(blogposts); i++ {&nbsp; &nbsp; models[i].Id = keys[i].IntID()&nbsp; &nbsp; models[i].Title = blogposts[i].Title&nbsp; &nbsp; models[i].Content = blogposts[i].Content&nbsp; }&nbsp; //... render with mustache ...}type BlogPostVM struct {&nbsp; Id int&nbsp; Title string&nbsp; Content string}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go