如何从 Google App Engine 实体在客户端呈现 JSON

How to render JSON on client-side from Google App Engine Entity

对于从 Google App Engine 实体在客户端呈现 JSON 对象的帮助,我将不胜感激。

这是我所有的相关代码:

def render_str(template, **params):
   t = jinja_env.get_template(template)
   return t.render(params)

class BlogHandler(webapp2.RequestHandler):
   def write(self, *a, **kw):
      self.response.out.write(*a, **kw)

   def render_str(self, template, **params):
      params['user'] = self.user
      return render_str(template, **params)

   def render(self, template, **kw):
      self.write(self.render_str(template, **kw))

class Post(ndb.Model):
   subject = ndb.TextProperty(required = True)
   created = ndb.DateTimeProperty(auto_now_add = True)
   startdate = ndb.DateTimeProperty()
   enddate = ndb.DateTimeProperty()

class PostPage(BlogHandler):
    def get(self, post_id):
    key = ndb.Key('Post', int(post_id), parent=blog_key())
    post = key.get()
    postdict = post.to_dict()
    postdict['startdate'] = postdict['startdate'].isoformat()
    self.render("permalink.html", postdict = postdict)

在模板页面的脚本标签中,我包含

<script>
var jsonobject = JSON.parse({{ postdict['startdate']}});
var jsonobject1 = new Date(jsonobject);
</script>    

我走的路对吗?我想最终在客户端使用 datetime 对象来实现一些 Jquery 功能。

如能为我指明正确的方向,我们将不胜感激。

您的代码有很多问题。首先,一旦将 post 转换为字典 postdict,就无法使用点符号来引用元素。您必须使用字典引用 postdict['startdate'] 来引用 startdate 元素。

接下来,我在以 JSON 格式存储日期时使用 isoformat() 函数:

postdict['startdate'] = postdict['startdate'].isoformat()

这样可以更轻松地转换为 Javascript 日期对象:

<script>
var jsonobject = JSON.parse({{ postdict.jsonobject}});
jsonobject[0].y = new Date(jsonobject[0].y);
</script>