google-app-engine - 添加 *datastore.Key 到 slice

标签 google-app-engine key google-cloud-datastore go

我成功获取所有数据并使用模板显示在表格中。我在此代码中使用 Go 查询以 Membership 作为实体类型的数据存储区。

在html页面中,显示了所有数据,但不显示键。

我尝试将 Key *datastore.Key 作为属性添加到 Membership 结构中,但仍然没有成功。

这是我的代码:

package hello

import (
    "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>`

最佳答案

您需要将 key 分配给 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:"-"`
    ....
}

顺便说一句。如果您想在 HTML 中显示 *datastore.Key,您应该 Encode()之前。

关于google-app-engine - 添加 *datastore.Key 到 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14164678/

相关文章:

java - Appengine MemCache 在多次运行中重置

python - 带有 index.html 的 Google App Engine 中的 yaml

list - Flutter:通用列表处理不同的键值对

python - Google Appengine 数据存储 - python

java - App-Engine 在调用已更新实体的 getByObjectId 时抛出 NullPointerException

java - 无法部署到 Google App Engine : java. lang.IllegalArgumentException:类文件是 Java 8 但最大支持是 Java 7

java - 限制 blobstoreservice 在验证之前将文件存储在 GCS 中

api - Google map API - V2 键 x V3 无键

MongoDB不区分大小写的键搜索

python - GAE 查询 fetch()