アプリエンジンWebApp.RequestHandler Child Instancesにはself.requestがありません__init__
-
23-10-2019 - |
質問
私はアプリでリクエストを処理するために変更されたwebapp.requesthandlerを使用します。
class MyRequestHandler(webapp.RequestHandler):
"""
Request handler with some facilities like user.
self.out is the dictionary to pass to templates
"""
def __init__(self, *args, **kwargs):
super(MyRequestHandler, self).__init__(*args, **kwargs)
self.out = {
'user': users.get_current_user(),
'logout_url': users.create_logout_url(self.request.uri)
}
def render(self, template_name):
"""
Shortcut to render templates
"""
self.response.out.write(template.render(template_name, self.out))
class DeviceList(MyRequestHandler):
def get(self):
self.out['devices'] = GPSDevice.all().fetch(1000)
self.render('templates/device_list.html')
しかし、私は例外を取得します:
line 28, in __init__
self.out['logout_url'] = users.create_logout_url(self.request.uri)
AttributeError: 'DeviceList' object has no attribute 'request'
例外を引き起こすコードが移動されたとき __init__
すべて順調:
class MyRequestHandler(webapp.RequestHandler):
"""
Request handler with some facilities like user.
self.out is the dictionary to pass to templates and initially it contains user object for example
"""
def __init__(self, *args, **kwargs):
super(MyRequestHandler, self).__init__(*args, **kwargs)
self.out = { 'user': users.get_current_user(), }
def render(self, template_name):
"""
Shortcut to render templates
"""
self.out['logout_url'] = users.create_logout_url(self.request.uri)
self.response.out.write(template.render(template_name, self.out))
それは誰ですか?なぜないのか self.request
親の後(すなわちwebapp.requesthandler's) __init__
実行されましたか?
解決
初期化(リクエスト、応答)リクエストと応答オブジェクトでハンドラーインスタンスを初期化します。通常、WSGIAPPLICATIONは、ハンドラークラスをインスタンス化した後にこれを行います。
リクエストオブジェクトがすでに入力されていると予想している場合、initの代わりに初期化をオーバーライドしたいようです。
所属していません StackOverflow