链接到列表中的实体

Linking to entity from list

我有一个咨询页面,其中列出了数据存储中的咨询。列表循环是这样的:

{% for consult in consults %}
 <tr>
  <td><a href="consults/#">{{ consult.consult_date }}</a></td>
  <td>{{ consult.consult_time }}</td>
  <td>{{ consult.patient_first }}</td>
  <td>{{ consult.patient_last }}</td>
  <td><span class="badge badge-warning">{{ consult.consult_status }}</span></td>
 </tr>
{%endfor%}

处理程序是这样的:

class ConsultsPage(webapp2.RequestHandler):
    def get(self):
        consults = Consults.query().fetch(5)
        consults_dic = {"consults" : consults}
        template = JINJA_ENVIRONMENT.get_template('/templates/consults.html')
        self.response.out.write(template.render(**consults_dic))

我想知道我如何使列表中的每个咨询成为一个link进入并查看有关该特定咨询的信息背后的基本概念。

我了解我需要使用密钥来检索实体,但我不确定该过程的其余部分。

编辑 我添加了以下行:

url = '/display_consult?key=%s' % consults.key.urlsafe()

到我的 ConsultsPage(列出咨询的地方)。处理程序现在看起来像这样:

class ConsultsPage(webapp2.RequestHandler):
    def get(self):
        consults = Consults.query().fetch(5)
        consults_dic = {"consults" : consults}
        url = '/display_consult?key=%s' % consults.key.urlsafe()
        template = JINJA_ENVIRONMENT.get_template('/templates/consults.html')
        self.response.out.write(template.render(**consults_dic))

但是我得到这个错误:

url = '/display_consult?key=%s' % consults.key.urlsafe()
AttributeError: 'list' object has no attribute 'key'

此外,我在列出咨询的循环中的 link href 中放入了什么?是不是像:

href="consults/{{ url }}"

来自Retrieving Entities from Keys

You can also use an entity's key to obtain an encoded string suitable for embedding in a URL:

url_string = sandy_key.urlsafe()

This produces a result like agVoZWxsb3IPCxIHQWNjb3VudBiZiwIM which can later be used to reconstruct the key and retrieve the original entity:

sandy_key = ndb.Key(urlsafe=url_string)
sandy = sandy_key.get()

因此,对于每个 consult 实体,您可以获得一个唯一的 URL,您可以在其中显示有关该实体的信息。例如,通过使用 URL 参数:

url = '/display_consult?key=%s' % consult.key.urlsafe()

并且在 /display_consult 页面处理程序中,您将获得这样的实体:

consult = ndb.Key(urlsafe=request.get('key')).get()