2015-11-15 87 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_strrender被縮進太遠,所以他們的write方法內。將它們移出,以便它們與def write的縮進級別相同(或縮進write方法以使其與其他兩個級別相同)。

+0

ARAGAH !! Gawd McDabbit。就是這樣。謝謝。 –

+0

我會盡快答覆。 –

+1

@MorganAllen請注意,按照官方風格指南的建議,每個縮進級別有四個空格,這使得它比當前使用的兩個更明顯。 – jonrsharpe