【问题标题】:Python Appengine - Pass two entities to jinja template viewPython Appengine - 将两个实体传递给 jinja 模板视图
【发布时间】:2017-07-23 18:36:24
【问题描述】:

我有一个 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 }} 正在打印为空字符串(或什么都没有)。

【问题讨论】:

    标签: python-2.7 google-app-engine jinja2 webapp2


    【解决方案1】:

    consultassessment共享相同的key ID,但key和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())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 2014-05-28
      • 2016-09-08
      相关资源
      最近更新 更多