Я должен делать что-то глупое. Я выполняю это в Google App Engine:
class MainHandler(webapp.RequestHandler):
def render(self, template_name, template_data):
path = os.path.join(os.path.dirname(__file__), 'static/templates/%s.html' % template_name)
self.response.out.write(template.render(path, template_data)) # error here
def get(self):
self.response.out.write("hi")
def main():
application = webapp.WSGIApplication([('/', MainHandler)],
debug=True)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
Это дает ошибку:
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3192, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3135, in _Dispatch
base_env_dict=env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 516, in Dispatch
base_env_dict=base_env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2394, in Dispatch
self._module_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2304, in ExecuteCGI
reset_modules = exec_script(handler_path, cgi_path, hook)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2200, in ExecuteOrImportScript
exec module_code in script_module.__dict__
File "main.py", line 22, in <module>
class MainHandler(webapp.RequestHandler):
File "main.py", line 38, in MainHandler
self.writeOut(template.render(path, template_data))
NameError: name 'self' is not defined
Что я делаю неправильно?
Исключение происходит во время определения класса, что означает, что ваш отступ отключен. Табуляция в Python эквивалентна 8 пробелам, поэтому, если во всех предыдущих строках используются табуляции, а ваша табуляция установлена на 4 пробела, то только отступ выглядит правильным.
Большинство руководств по стилю для python, включая руководство по стилю google, рекомендуют использовать пробелы вместо табуляции... большинство текстовых редакторов также поддерживают это. Это поможет вам избежать ошибок, подобных этой.