我正在開發一個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
當我們在全局變量中使用它時,會話變量出現錯誤。 –