Google App Engine JSON 属性 错误
Google App Engine JSON Property Error
我只是 python/json 的初学者。我有一个 html 文档,基本上允许人们输入 (1) class 名称和 (1) 先决条件。在我的 post 方法中,我尝试创建一个新字典,添加 (key) class 名称和 (value) prereq。但是我收到此回溯错误:
Traceback (most recent call last):
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2- .5.2\webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2- 2.5.2\webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1102, in __call__
return handler.dispatch()
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "C:\Users\Desktop\classes\main.py", line 27, in post
self.response.write(template.render(extracted_output))
File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2-2.6\jinja2\environment.py", line 889, in render
vars = dict(*args, **kwargs)
ValueError: dictionary update sequence element #0 has length 1; 2 is required
另一个问题是,当我创建一个新的 Class_Name
对象时,class_title
会自动成为 JsonProperty
吗?
class Class_Name(ndb.Model):
class_title = ndb.JsonProperty()
def post(self):
classname = self.request.get('classname')
prereq = self.request.get('prereq')
new_dictionary = {}
new_dictionary [classname] = prereq
new_class = Class_Name(class_title = new_dictionary )
new_class.put()
dictionary_extracted = new_class.class_title
extracted_output = json.dumps(dictionary_extracted)
template = jinja2_environment.get_template('template/post.html')
self.response.write(template.render(extracted_output))
在您的代码片段中:
extracted_output = json.dumps(dictionary_extracted)
template = jinja2_environment.get_template('template/post.html')
self.response.write(template.render(extracted_output))
json.dumps
returns a string -- 然后你只将 string 传递给 template.render
...那永远行不通!
如果正如您在评论中所说(您应该编辑您的问题以使其更清楚!),您的模板包含的内容是 {{extracted_output}}
,那么该变量 name 必须传递给 render
,即最后一个语句必须成为
self.response.write(template.render(extracted_output=extracted_output))
我只是 python/json 的初学者。我有一个 html 文档,基本上允许人们输入 (1) class 名称和 (1) 先决条件。在我的 post 方法中,我尝试创建一个新字典,添加 (key) class 名称和 (value) prereq。但是我收到此回溯错误:
Traceback (most recent call last):
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2- .5.2\webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2- 2.5.2\webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1102, in __call__
return handler.dispatch()
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "C:\Users\Desktop\classes\main.py", line 27, in post
self.response.write(template.render(extracted_output))
File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2-2.6\jinja2\environment.py", line 889, in render
vars = dict(*args, **kwargs)
ValueError: dictionary update sequence element #0 has length 1; 2 is required
另一个问题是,当我创建一个新的 Class_Name
对象时,class_title
会自动成为 JsonProperty
吗?
class Class_Name(ndb.Model):
class_title = ndb.JsonProperty()
def post(self):
classname = self.request.get('classname')
prereq = self.request.get('prereq')
new_dictionary = {}
new_dictionary [classname] = prereq
new_class = Class_Name(class_title = new_dictionary )
new_class.put()
dictionary_extracted = new_class.class_title
extracted_output = json.dumps(dictionary_extracted)
template = jinja2_environment.get_template('template/post.html')
self.response.write(template.render(extracted_output))
在您的代码片段中:
extracted_output = json.dumps(dictionary_extracted)
template = jinja2_environment.get_template('template/post.html')
self.response.write(template.render(extracted_output))
json.dumps
returns a string -- 然后你只将 string 传递给 template.render
...那永远行不通!
如果正如您在评论中所说(您应该编辑您的问题以使其更清楚!),您的模板包含的内容是 {{extracted_output}}
,那么该变量 name 必须传递给 render
,即最后一个语句必须成为
self.response.write(template.render(extracted_output=extracted_output))