我正在开发一个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>
注:如果您使用Flask,它使用Jinja2作为模板引擎,会话变量作为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)
相关问题
- 1. Jinja2:本地/全局变量
- 2. 访问jinja2中的变量时出错
- 3. Jinja2中的访问变量包括
- 4. 变量内的Python(Jinja2)变量
- 5. 如何在Jinja2中将时间戳更新为全局变量?
- 6. HTML中的会话或全局变量
- 7. Jinja2空间变量
- 8. 在Javascript中插入Jinja2变量
- 9. 设置和访问全局变量
- 10. 在Jinja2中访问循环变量外循环
- 11. 无法访问全局变量在python
- 12. 将ASP会话变量设置为Javascript全局变量值
- 13. jinja2:html转义变量
- 14. Salesforce会话变量,在会话中设置并获取变量
- 15. 如果变量,变量定义 - Jinja2的
- 16. 在函数中访问全局变量
- 17. Android:在onClickListener中访问全局变量
- 18. 作为webapp2中的全局变量访问请求
- 19. webapp2 2.5.2在最新的1.7.4中python SDK抛出AssertionError:WSGIApplication全局变量未设置
- 20. 全局访问变量权限,设置在我的CakePHP AppController中
- 21. 设置一个全局变量并在jquery/javascript中访问它
- 22. jinja2:使用全局变量来选择文本的乳胶块
- 23. 如何在for循环之外访问jinja2变量?
- 24. 在jQuery中设置全局变量
- 25. 在Drools中设置全局变量
- 26. 在grails中设置全局变量
- 27. 在c#中设置全局变量class
- 28. 在jQuery中设置全局变量onclick
- 29. 在MS Access中设置全局变量
- 30. 在线程中设置全局变量
能否请你解释了一下我该如何使用呢? –
新增使用示例 – BrettJ
当我们在全局变量中使用它时,会话变量出现错误。 –