0

このコード行:

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")) を文字列値として解釈します。それを修正して私の目標を達成するにはどうすればよいですか?

4

1 に答える 1

2

エラーが伝えているのは、intまたはのリストが必要だということですintこれはdocsと一致しています。contract_idしたがって、最初に に変換する必要があります int

...
else:
  contract = Contract.get_by_id(int(contract_id))

contract_idまた、渡されたかどうかを確認する方法を変更する必要があります。self.request.get値が定義されていない場合、メソッドは空の文字列を返します。http://webapp-improved.appspot.com/api/webapp2.html#webapp2.Request.getを参照してください。

したがって、ここで代替手段を講じる必要があります。

contract_id = self.request.get("contract_id")
if not contract_id:

また

contract_id = self.request.get("contract_id", None)
if contract_id is None:
于 2012-08-09T16:51:01.520 に答える