2017-10-12 8 views
0

webapp2 python 프로젝트에서 작업하고 있습니다. jinja2 템플릿에서 세션 변수에 액세스 할 수있는 방법이 있습니까? 세션 변수를 가져온 다음 템플릿에 전달한 다음 사용할 수 있다는 것을 알고 있습니다. 하지만 나는 핸들러가 많아서 매번 세션 변수를 렌더링 함수에 전달하고 싶지 않습니다. 우리가 PHP에서 직접 세션 값을 템플릿에서 할 수있는 것과 같은 것을 찾고 있습니다. 어떤 도움을 주시면 감사하겠습니다.jinja2에서 세션 변수에 액세스하거나 jinja2에서 전역 변수를 설정하십시오. webapp2 python

답변

3

Jinja2가 포함 된 webapp2의 경우 webapp2_extras.jinja2.default_config을 사용하고 추가 전역을 전달해야 할 수도 있습니다. (당신은 "사용자 이름"값을 설정 가정)

webapp2_extras.jinja2.default_config = { 
    "globals": { 
    "session": session 
    } 
} 

그리고 템플릿에,이 같은 세션 변수에 액세스 할 : :이 올바른 구문 생각

<p>Welcome {{ session['username'] }}!</p> 

참고 : 만약 Jinja2를 템플릿 엔진으로 사용하는 Flask를 사용하면 세션 변수가 standard context의 일부로 템플릿에 전달됩니다.

+0

당신이 그것을 내가 그것을 사용하는 방법을 조금 설명해 주실 수 있습니까? –

+0

추가 된 사용 예제 – BrettJ

+0

우리가 전역 변수에서 사용할 때 세션 변수에 오류가 발생합니다. –

1

또는 템플릿 컨텍스트 추가 할 BaseHandler를 사용

class BaseHandler(webapp2.RequestHandler): 
    """ webapp2 base handler """ 

    def __init__(self, request, response): 

     self.session_store = None 
     super(BaseHandler, self).__init__(request, response) 
     user = users.get_current_user() 
     # if not users.is_current_user_admin(): 
     if user.email() not in USER_CONFIG: 
      self.abort(401) 

    def dispatch(self): 

     # Get a session store for this request. 
     self.session_store = sessions.get_store(request=self.request) 
     if not self.session: 
      session_data_or_default(self.session) 
     try: 
      # Dispatch the request. 
      webapp2.RequestHandler.dispatch(self) 
     finally: 
      self.session['route_name'] = self.request.route.name 
      # Save all sessions. 
      self.session_store.save_sessions(self.response) 

    @webapp2.cached_property 
    def session(self): 
     # Returns a session using the default cookie key. 
     # we use memcache because the amount of data you can store in a secure cookie is limited. 
     return self.session_store.get_session(name='my-secret-session', backend='memcache') 

    @webapp2.cached_property 
    def jinja2(self): 
     return jinja2.get_jinja2(app=self.app) 

    def render_template(self, template, **template_args): 
     template_args['session'] = self.session 
     template_args['version'] = modules.get_current_version_name() 

     self.response.write(self.jinja2.render_template(template, **template_args)) 

    def return_rendered(self, template, **template_args): 
     template_args['session'] = self.session 

     return self.jinja2.render_template(template, **template_args)