웹 응용 프로그램 페이지가 몇 가지 기본 메소드와 변수를 상속 할 수 있도록 base request handling
클래스를 정의하려고합니다. 그렇지 않으면 응용 프로그램의 각 페이지에 대해 반복적으로 정의해야합니다. django preprocessors
와 비슷한 종류의 기능. 이것은 다른 페이지가 상속하는 내 기본 클래스입니다.Google App Engine, 전처리 클래스 정의
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를 사용할 수 없으므로 초기화 중에 일부 변수를 전달할 수 없다는 점을 제외하면 모든 것이 잘 작동합니다. 그래서 해결 방법은 내가 한 일은 전체 자체 변수를 템플릿 변수로 전달하는 것입니다.
템플릿 변수 (request, logout_url 등)를 템플릿에 제공하는 다른 방법이 있습니까?
감사합니다. 나는 커스텀 get, posts를 기본 클래스에 정의하고 super()를 사용하는 줄에서 생각하고 있었다. 그러나이 DoPost, DoGet은 훌륭하게 보인다 !! 나는 이것이 많은 장고 기능을 필요로하지 않는 나의 작은 프로젝트에 좋은 것이라고 생각한다. – crodjer
@dcrodjer - 우수! – bgporter