2012-12-25 5 views
2

Ниже приведен код, который я использую для формы для ввода новых случаев в хранилище данных GAE. Когда я пытаюсь ввести форму, я получаю ошибку типа ниже, говоря, что я использую неожиданный аргумент ключевого слова. Я новичок в python и GAE, кто-нибудь знает, что я делаю неправильно?ТипError: __init __() получил неожиданный аргумент ключевого слова

class Case(db.Model): 
    user = db.StringProperty(required = True) 
    title = db.StringProperty(required = True) 
    facts = db.TextProperty() 
    holding = db.TextProperty() 
    rule_of_law = db.TextProperty() 
    general_notes = db.TextProperty() 
    key_concepts = db.TextProperty()   

class NewCase(Handler): 
    def get(self,title="", 
      facts="", 
      holding="", 
      rule_of_law="", 
      general_notes="", 
      key_concepts="", 
      error=""): 

     if self.user: 
      self.render('newcase.html', title=title, 
         facts=facts, 
         holding=holding, 
         rule_of_law=rule_of_law, 
         general_notes=general_notes, 
         key_concepts=key_concepts, 
         error=error) 
     else: 
      self.redirect('/login') 

def post(self): 
    if not self.user: 
     self.redirect('/') 

    user = self.read_secure_cookie('user_id')  
    self.title = self.request.get('title') 
    self.facts = self.request.get('facts') 
    self.holding = self.request.get('holding') 
    self.rule_of_law = self.request.get('rule_of_law') 
    self.general_notes = self.request.get('general_notes') 
    self.key_concepts = self.request.get('key_concepts') 

    if self.title: 
     c = Case(user = user, 
       title = self.title, 
       facts = self.facts, 
       holding = self.holding, 
       rule_of_law = self.rule_of_law, 
       general_notes = self.general_notes, 
       key_concepts = self.key_concepts) 

     c.put() 

     self.redirect('/%s' % c.key().id()) 

    else: 
     error = "You must enter a title." 
     self.render('newcase.html',title = self.title, 

Ошибка я получаю:

File "C:\Users\Chris\Documents\Web Apps\legalstudybuddy\main.py", line 233, in post 
    key_concepts = self.key_concepts) 
TypeError: __init__() got an unexpected keyword argument 'rule_of_law' 
+0

Вы должны показать своего обработчика – voscausa

+0

Как-то я, кажется, исправил проблему. Не совсем уверен, что я сделал, но теперь это работает. – user1927856

ответ

2

Я предполагаю, что вы используете Django шаблоны. От: https://developers.google.com/appengine/docs/python/gettingstarted/templates

template.render(path, template_values) takes a file path to the template file and a dictionary of values, and returns the rendered text.

Обратите внимание, что render принимает только два аргумента: путь к шаблону, который вы предоставили, и один словарь, который имеет все другие ценности шаблон ожидает.

Вы передали все эти значения в качестве аргументов, а не упаковали в словарь.

Изменение:

self.render('newcase.html', title=title, facts=facts, holding=holding, ...) 

к:

self.render('newcase.html', {title=title, facts=facts, holding=holding, ...}) 

и аналогично для любого другого делают звонки.

+2

Проблема не связана с вызовом рендеринга, поскольку я использую другие вызовы рендеринга с несколькими переменными, и это работает отлично. Я думаю, что ошибка типа ссылается на неожиданный аргумент ключевого слова при создании объекта GAE. Строка редактирования 233 - это строка в c = Case (...) – user1927856

1

После столкновения с той же проблемой я обнаружил, что моя проблема связана с определениями маршрута webapp2.WSGIApplication.

Я определил свой маршрут следующим образом, например:

webapp2.Route('/api/something/anEndpoint', handlers.SomethingEndpointHandler) 

Однако, не было даже до того, что маршрут, потому что другой маршрут, который захватил регулярное выражение ключевое слово, определенное ранее в списке маршрутов, в настоящее время запускается вместо:

webapp2.Route('/api/something/<something_id>', handlers.SomethingElseHandler) 

Это вызвало TypeError в ОП появиться с неожиданным аргументом ключевого слова «something_id».

Очень сложная ошибка для отладки, но, надеюсь, это помогает кому-то!