0
這行代碼:MainHandler中的Python GAE BadArgumentError get(self)方法。如何解決這個問題?
contract = Contract.get_by_id(contract_id)
從這個塊:
class MainHandler(webapp2.RequestHandler):
def get(self):
contract_id = self.request.get("contract_id")
if contract_id is None:
contract = db.GqlQuery("SELECT * FROM Contract ORDER BY date DESC").get()
if contract == None:
numBook = 1
numInitialPage = 1
numFinalPage = 1
else:
contract = Contract.get_by_id(contract_id)
template_values = {"numBook":numBook,
"numInitialPage":numInitialPage,
"numFinalPage":numFinalPage}
template = jinja_environment.get_template('index.html')
self.response.out.write(template.render(template_values))
正在產生這樣的錯誤:
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "C:\Users\Py\Desktop\contract\main.py", line 277, in get
contract_id = self.request.get("contract_id")
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\db\__init__.py", line 1292, in get_by_id
ids, multiple = datastore.NormalizeAndTypeCheck(ids, (int, long))
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\datastore.py", line 139, in NormalizeAndTypeCheck
(types, arg, typename(arg)))
BadArgumentError: Expected an instance or iterable of (<type 'int'>, <type 'long'>); received (a str).
我的目標是:如果這個值是通過變量contract_id
當傳遞其他處理程序重定向到MainHandler,MainHandler應該使用它。但是如果MainHandler第一次被使用,那麼contract_id
的值應該是None
而程序應該是另一回事。但是這沒有發生。當MainHandler被調用時,它將'contract_id'(來自self.request.get("contract_id")
)解釋爲一個字符串值。如何解決這個問題並實現我的目標?
非常感謝您,塞巴斯蒂安,但是,開放時使用的第一次,'contract_id'沒有價值。如果我使用'contract = Contract.get_by_id(int(contract_id))'我得到這個錯誤:'ValueError:int()以10爲底的無效文字:'''。 – craftApprentice 2012-08-09 17:23:01
@ Pythonista'sApprentice:umm ..然後在打電話之前檢查它是否有價值? – geoffspear 2012-08-09 17:25:13
查看更新的代碼。你之前做的檢查是錯誤的。 – 2012-08-09 17:28:44