2012-12-25 65 views
2

以下是我用于将表单输入到GAE数据存储中的新案例的代码。当我尝试输入表单时,我在下面说出我正在使用一个意外的关键字参数的类型错误。我是python和GAE的新手,有谁知道我做错了什么?TypeError:__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实体Case时引用了一个意外的关键字参数。编辑第233行是c = Case(...)中的行 – user1927856

1

运行到相同的问题后,我发现我的问题是在webapp2.WSGIApplication路由定义。

我已经定义了我的路线如下,例如,

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

然而,这条路线甚至没有达到,因为另一路由捕获的正则表达式关键字,在路由表之前定义的,是被触发,而不是:

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

这OP引起类型错误与意外的关键字参数“something_id”一起出现。

一个非常困难的错误调试,但希望这可以帮助别人!

相关问题