webapp2 python 프로젝트에서 작업하고 있습니다. jinja2 템플릿에서 세션 변수에 액세스 할 수있는 방법이 있습니까? 세션 변수를 가져온 다음 템플릿에 전달한 다음 사용할 수 있다는 것을 알고 있습니다. 하지만 나는 핸들러가 많아서 매번 세션 변수를 렌더링 함수에 전달하고 싶지 않습니다. 우리가 PHP에서 직접 세션 값을 템플릿에서 할 수있는 것과 같은 것을 찾고 있습니다. 어떤 도움을 주시면 감사하겠습니다.jinja2에서 세션 변수에 액세스하거나 jinja2에서 전역 변수를 설정하십시오. webapp2 python
0
A
답변
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의 일부로 템플릿에 전달됩니다.
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)
당신이 그것을 내가 그것을 사용하는 방법을 조금 설명해 주실 수 있습니까? –
추가 된 사용 예제 – BrettJ
우리가 전역 변수에서 사용할 때 세션 변수에 오류가 발생합니다. –