2010-06-25 22 views
6

我一直在嘗試並嘗試幾個小時,現在必須有一個簡單的方法來檢索網址。我認爲這是方式:爲什麼我會得到TypeError:get()只需要2個參數(給出1)?谷歌應用引擎

#from data.models import Program 

import basehandler 

class ProgramViewHandler(basehandler.BaseHandler): 
    def get(self,slug): 
#  query = Program.all() 
#  query.filter('slug =', fslug) 
     self.render_template('../presentation/program.html',{}) 

每當這個代碼得到執行,我得到的堆棧跟蹤此錯誤:

的AppEngine \分機\ webapp__init __ PY」,線路511,在通話 處理程序。 get(* groups) TypeError:get()需要2個參數(1給出)

我已經做了一些調試,但是這種調試超出了我的調試級別。 ,slug)一切正常。

這是basehandler:

import os 

from google.appengine.ext import webapp 
from google.appengine.ext.webapp import template 



class BaseHandler(webapp.RequestHandler): 
    def __init__(self,**kw): 
     webapp.RequestHandler.__init__(BaseHandler, **kw) 

    def render_template(self, template_file, data=None, **kw): 
     path = os.path.join(os.path.dirname(__file__), template_file) 
     self.response.out.write(template.render(path, data)) 

如果有人能在正確的方向指向我,這將是巨大的!謝謝!這是我第一次使用stackoverflow發佈問題,通常我只是閱讀它才能解決我遇到的問題。

+2

你的BaseHandler的__init__也是錯誤的 - 它應該是'super(BaseHandler,self).__ init __(** kw)' - 但是由於它實際上沒有做任何事情,所以沒有必要首先覆蓋它。 – 2010-06-26 10:39:50

回答

9

您正在收到此錯誤,因爲ProgramViewHandler.get()正在被調用而沒有slug參數。

很可能,您需要修復您的main.py文件中的URL映射。您的URL映射應該如下所示:

application = webapp.WSGIApplication([(r'/(.*)', ProgramViewHandler)]) 

圓括號表示正則表達式分組。這些匹配的組作爲參數傳遞給您的處理程序。因此在上面的例子中,在初始「/」之後的URL中的所有內容都將被傳遞給ProgramViewHandler.get()slug參數。

瞭解有關webapp here中的URL映射的更多信息。

+0

是的,我認爲我有這個,但我不確定是否把它放在它之前。這意味着什麼?我之前看到過它。 這是否意味着這應該是正則表達式分析? – 2010-06-26 12:58:52

+0

'r'前綴表示以下字符串文字是[原始字符串文字](http://docs.python.org/reference/lexical_analysis.html#string-literals)。原始字符串基本上將反斜槓視爲任何其他字符而不是轉義序列(除非您仍然可以轉義引號標記,否則該標記符號將指示字符串文字的結尾)。指定正則表達式時經常使用它們,因爲這些語法的語法大量使用反斜槓。在我提供的例子中,'r'沒有什麼區別,因爲字符串中沒有反斜槓。 – 2010-06-26 13:13:40

+0

啊感謝您的解釋。我很愚蠢地忘記改變主力。猜測工作日太久都不好。 – 2010-06-26 14:42:07

1

如果你這樣做:

obj = MyClass() 
obj.foo(3) 

上MyClass的foo的方法被調用參數:

def foo(self, number) 

上調用它作爲第一個參數傳遞的對象。

也許您正在靜態調用get()(即,執行ProgramViewHandler.get()而不是myViewHandlerVariable.get()),或者您缺少參數。

+1

啊我現在明白了這個問題。我在某處讀過這些。你的解釋非常好,我希望現在可以解決它。會讓你更新。 – 2010-06-25 16:12:32

相關問題