2015-08-28 4 views
0

Я просто начинающий в python/json. У меня есть html-документ, который в основном позволяет людям вводить (1) имя класса и (1) preereq. В моем методе post я попытался создать новый словарь, добавить имя класса (key) и (значение) prereq. Однако я получаю этот след назад ошибку:Ошибка Google App Engine JSON Ошибка

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)) 
+0

'template.render' ожидает словарь или kwargs для определения переменных шаблона, но вы передали строку' json'. Какие переменные имена ожидает шаблон? –

+0

для моего шаблона/post.html, все, что я делаю, это печатать словарь нравится это {{extract_output}} – amay20

ответ

1

В фрагменте кода:

extracted_output = json.dumps(dictionary_extracted) 
template = jinja2_environment.get_template('template/post.html') 
self.response.write(template.render(extracted_output)) 

json.dumps возвращает строку - и тогда вы передаете только что строка в template.render ... что никогда не может работать!

Если, как вы говорите, в комментарии (вы должны изменить свой вопрос, чтобы сделать его более ясным!), Что ваш шаблон содержит это {{extracted_output}}, то это переменная имени должно быть передано в render, то есть, последнее утверждение должно стать

self.response.write(template.render(extracted_output=extracted_output)) 
+0

Спасибо, что у меня есть моя программа! – amay20