0

アプリでリクエストを処理するために、変更された 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)__init__が実行された後がないのはなぜですか?

4

1 に答える 1

6

http://code.google.com/appengine/docs/python/tools/webapp/requesthandlerclass.html#RequestHandler_initialize

initialize(request, response) Request オブジェクトと Response オブジェクトを使用してハンドラー インスタンスを初期化します。通常、WSGIApplication はハンドラ クラスをインスタンス化した後にこれを行います。

リクエストオブジェクトがすでに入力されていると予想される場合は、init ではなく initialize をオーバーライドしたいようです。

于 2010-06-02T19:21:37.340 に答える