我試圖定義一個base request handling
類,以便將Web應用程序的頁面可以繼承,否則將需要進行反覆的應用程序的每個頁面中定義的一些基本方法和變量。一種類似的功能,如django preprocessors
。這是我的基類,其他頁面繼承:谷歌應用程序引擎,定義一個預處理類
class BasePage(webapp.RequestHandler):
def __init__(self):
self.user = users.get_current_user()
self.template_values = {
'user': self.user,
'environ': self, #I don't like the idea of passing the whole environ object to a template
##The below three functions cannot be executed during _init_ because of absence of self.request
#'openid_providers': self.openid_providers(),
#'logout_url': self.get_logout_url(),
#'request': self.get_request(),
}
##A sort of similar functionality like render_to_response in django
def render_template(self, template_name, values = None, *args, **kwargs):
#PATH is the directory containing the templates
if values:
for value in values: self.template_values[value] = values[value]
self.response.out.write(template.render(PATH+template_name, self.template_values, *args, **kwargs))
##Returns request as the name suggests
def logout_url(self):
return users.create_logout_url(self.request.url)
##Returns request as the name suggests
def request(self):
return request
##Returns openid login urls
def openid_providers(self):
#OPENID_POVIDERS is a list of dictionary
for p in OPENID_PROVIDERS:
p['login_url'] = users.create_login_url(self.request.get('next', '/') , p['name'], p['url'])
return OPENID_PROVIDERS
一切工作,除了爲self.request獲取不可用,我不能在初始化過程中通過一些變量的罰款。因此,對於解決方法,我所做的是將整個自變量作爲模板變量傳遞。
有一些其他的方式來提供模板變量(請求,logout_url等)的模板?
的感謝!我正在考慮定義自定義get,基類中的帖子和使用super(),但是這個DoPost,DoGet似乎很棒!我認爲這對於我不需要很多django功能的小型項目來說非常有用。 – crodjer 2010-12-20 13:40:09
@dcrodjer - 優秀! – bgporter 2010-12-20 13:58:41