2011-12-13 6 views
0

webapp2에서 오류가 발생하여 여기에서 문제가 될 수 있습니다.AttributeError : 'NoneType'객체에 'route'및 webapp2 속성이 없습니다.

ERROR 2011-12-13 11:17:19,059 webapp2.py:1528] 'NoneType' object has no attribute 'route' 
Traceback (most recent call last): 
    File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1511, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1505, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1253, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1077, in __call__ 
    return handler.dispatch() 
    File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 526, in dispatch 
    method_name = request.route.handler_method 
AttributeError: 'NoneType' object has no attribute 'route' 
ERROR 2011-12-13 11:17:19,060 wsgi.py:186] 
Traceback (most recent call last): 
    File "/home/user/sdk/google_appengine/google/appengine/runtime/wsgi.py", line 174, in Handle 
    result = handler(self._environ, self._StartResponse) 
    File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1519, in __call__ 
    response = self._internal_error(e) 
    File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1511, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1505, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1253, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1077, in __call__ 
    return handler.dispatch() 
    File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 526, in dispatch 
    method_name = request.route.handler_method 
AttributeError: 'NoneType' object has no attribute 'route' 

GAE의 최신 SDK 버전 (1.6.0)을 사용 중입니다.

내 코드는 다음과 같습니다

애플리케이션 제목을

application: test-app 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: true 

handlers: 
- url: /favicon\.ico 
    static_files: static/images/favicon.ico 
    upload: static/images/favicon\.ico 

- url: .* 
    script: main.site_app 
    login: required 

libraries: 
- name: django 
    version: "1.2" 

main.py

import os 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

import webapp2 
import urls 

site_app = webapp2.WSGIApplication(urls.SITE_URLS, debug=True) 

urls.py

import webapp2 

import handler 

SITE_URLS = [ 
    webapp2.Route(r'/', handler.TestHome), 
    webapp2.Route(r'/test/<test_key:\w+>', handler.TestPage) 
] 

basehandler.py

,451,515,
import os 
import webapp2 
from django import template 

class BaseHandler(webapp2.RequestHandler): 

    def __init__(self, *args, **kwargs): 
    self.tdict = {} 

    def render(self, template_file): 
    template_path = os.path.join(os.path.dirname(__file__), 
           'templates', 
           template_file) 
    t = template.Template(file(template_path,'rb').read()) 
    self.response.write(t.render(template.Context(self.tdict))) 

handler.py

import os 
from basehandler import BaseHandler 

class TestHome(BaseHandler): 

    def get(self): 
    def get(self): 
    self.render('browse.html') 


class TestPage(BaseHandler): 

    def get(self, test_key): 
    self.tdict['test_key'] = test_key 
    self.render('browse.html') 

템플릿/browse.html 내가 잘못 뭐하는 거지

<html> 
<head> 
    <title>Success!</title> 
</head> 
<body> 
Success! 
{% if test_key %}- {{ test_key }}{% endif %} 
</body> 
</html> 

? 어떤 도움이나 제안도 대단히 감사합니다!

답변

8

webapp2.RequestHandler.__init__()을 호출하지 않았기 때문이라고 생각합니다. 당신이 RequestHandlerrequestresponse으로 초기화됩니다 볼 수 있듯이

class RequestHandler(object): 
    # ... 
    def __init__(self, request=None, response=None): 
     self.initialize(request, response) 

: 여기 webapp2.py에서 코드입니다. 따라서 코드에서 동일한 작업을 수행해야합니다.

class BaseHandler(webapp2.RequestHandler): 
    def __init__(self, request, response): 
     self.tdict = {} 
     self.initialize(request, response) 
+0

고마워요! 그게 문제를 해결했습니다 :) 당신의 도움에 감사드립니다! – reallife

+1

자신 만의'__init__'에서'initialize'를 호출해서는 안됩니다 - 부모 생성자를'super (BaseHandler, self) .__ init __ (request, response)'로 호출해야합니다. 항상 항상 부모 생성자를 호출합니다. –

+0

@NickJohnson - 그 [webapp2 설명서] (http://webapp-improved.appspot.com/guide/handlers.html#overriding-init)에서 말한 내용이 아닙니다. 업데이트해야합니까? –

관련 문제