Python Appengine - 将两个实体传递给 jinja 模板视图

Python Appengine - Pass two entities to jinja template view

我有一个 View-Consult 页面,请求处理程序是:

class ViewConsultPage(webapp2.RequestHandler):
    def get(self):
        consult = ndb.Key(urlsafe=self.request.get('key')).get()
        template = JINJA_ENVIRONMENT.get_template('/templates/view-consult.html')
        template_values = {
        'consult': consult
        }
        self.response.out.write(template.render(template_values))

它显示有关咨询的信息。然后使用与咨询相同的 ID 创建评估。然后我想在同一页面上显示有关咨询和评估的信息。

我假设我将评估添加到与咨询类似的处理程序中:

class ViewConsultPage(webapp2.RequestHandler):
    def get(self):
        consult = ndb.Key(urlsafe=self.request.get('key')).get()
        assessment = ndb.Key(urlsafe=self.request.get('key')).get()
        template = JINJA_ENVIRONMENT.get_template('/templates/view-consult.html')
        template_values = {
        'consult': consult,
        'assessment': assessment
        }
        self.response.out.write(template.render(template_values))

当我加载视图咨询页面时,咨询属性像以前一样呈现,但评估属性,例如 {{ assessment.assess_notes }} 打印为空字符串(或什么都没有)。

consultassessment共享相同的密钥ID,但不是相同的密钥和urlsafe字符串,因此您不能使用相同的方法获取实体。

您可以通过密钥 ID 获取 assessment 实体 - 两个实体都相同。所以我会像这样重写 get() 的第一两行:

consult_key = ndb.Key(urlsafe=self.request.get('key'))
consult = consult_key.get()
# assessment and consult have the same key ID
assessment = Assesment.get_by_id(consult_key.id())