为了账号安全,请及时绑定邮箱和手机立即绑定

将* datastore.Key添加到切片

将* datastore.Key添加到切片

Go
慕尼黑8549860 2021-05-06 13:19:17
我正在成功获取所有数据,并使用模板将其显示在表格中。我在此代码中使用Go查询以Membership作为实体类型的数据存储。在html页面中,显示所有数据,但不显示键。我试图添加Key *datastore.Key作为属性的Membership结构,但仍然没有运气。这是我的代码:package helloimport (    "appengine"    "appengine/datastore"    "html/template"    "net/http"    "time")        type Membership struct {    Key *datastore.Key    Author  string    Content string    FirstName string    LastName string    Address string    Email string     Grade string    Date    time.Time}func init() {    http.HandleFunc("/", members)}func members(w http.ResponseWriter, r *http.Request) {    c := appengine.NewContext(r)    q := datastore.NewQuery("Membership").Order("-Date")    memberships := make([]Membership, 0, 10)    if _, err := q.GetAll(c, &memberships); err != nil {        http.Error(w, err.Error(), http.StatusInternalServerError)        return    }    if err := membersTemplate.Execute(w, memberships); err != nil {        http.Error(w, err.Error(), http.StatusInternalServerError)    }}var membersTemplate = template.Must(template.New("page").Parse(membersTemplateHTML))const membersTemplateHTML = `<html>  <body>    <table><tr><th>Key</th><th>Name</th><th>Email</th><th>Adress</th><th>Grade</th></tr>      {{range .}}        <tr>          <td>{{.Key}}</td>          <td>{{.FirstName}} {{.LastName}}</td>          <td>{{.Email}}</td>          <td>{{.Address}}</td>          <td>{{.Grade}}</td>        </tr>      {{end}}    </table>  </body></html>`
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您需要将密钥分配给Key属性:


func members(w http.ResponseWriter, r *http.Request) {

  ....

    if keys, err := q.GetAll(c, &memberships); err != nil {

        http.Error(w, err.Error(), http.StatusInternalServerError)

        return

    }

    // Loop over the membership and add the keys

    for i := range memberships {

         memberships[i].Key = keys[i]

    }

  ....

}

您可能还想禁用将Key属性存储在数据存储中:


type Membership struct {

    Key *datastore.Key `datastore:"-"`

    ....

}

顺便提一句。如果要以*datastore.KeyHTML格式显示,则应Encode()先显示。


查看完整回答
反对 回复 2021-05-31
  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信