2015-11-15 3 views
0

Я следую первому курсу Udacity и считаю Я выполнил все их инструкции, но получаю сообщение об ошибке.Функции и наследование классов

AttributeError: 'MainPage' object has no attribute 'render'  

Мой код ниже. В видеоролике это работает для них, но я не понимаю, почему. Когда я прочитал этот код, кажется, что render находится внутри класса Handler, и я пытаюсь назвать его внутри класса MainPage.

Почему это работает для них, а не для меня?

import os 
import webapp2 
import jinja2 

template_dir = os.path.join(os.path.dirname(__file__), 'html_templates') 
jinja_env = jinja2.Environment(loader= jinja2.FileSystemLoader(template_dir)) 



class Handler(webapp2.RequestHandler): 
    def write(self, *a, **kw): 
    self.response.out.write(*a, **kw) 

    def render_str(self, template, **params): 
     t = jinja_env.get_template(template) 
     return t.render(params) 

    def render(self, template, **kw): 
     self.write(self.render_str(template, **kw)) 

class MainPage(Handler): 
    def get(self): 
    self.render("shopping_list.html") 

app = webapp2.WSGIApplication([('/', MainPage), 
           ], 
           debug=True) 

ответ

1

Ваши методы render_str и render отступом слишком далеко, так что они находятся внутри метода write. Выдвиньте их так, чтобы они находились на том же уровне отступов, что и def write (или отступом метод write, так что он находится на том же уровне, что и два других).

+0

ARAGAH !! Gawd McDabbit. Вот и все. Спасибо. –

+0

Я помету его как можно скорее, как только смогу. –

+1

@MorganAllen отмечают, что четыре пробела на уровень отступов, как рекомендовано официальным руководством по стилю, делают это гораздо более визуально очевидным, чем два, которые вы используете в настоящее время. – jonrsharpe

Смежные вопросы