2017-10-12 7 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) 
関連する問題