2011-07-20 66 views
3

使用Google App Engines webapp框架,有什麼方法可以將數據傳遞到基本模板?
具體來說,我只想讓一個註銷按鈕在用戶登錄時顯示(使用Google自己的認證系統)。如何將數據傳遞給GAE基礎模板?

我還在學習,所以我不確定哪些部件是GAE特定的,哪些部件是django特定的;不得不從每一個請求處理程序發送登錄用戶似乎非常幹。

回答

3

參數傳遞給基本模板傳遞相同的方式與任何其他模板參數,通過傳遞給template.render 。我通常有我的基本處理程序的便捷方法是插入通用模板參數,這樣解決這個問題:

class BaseHandler(webapp.RequestHandler): 
    def render_template(self, filename, template_args): 
    path = os.path.join(os.path.dirname(__file__), 'templates', filename) 
    template_args.update({ 
     'user': users.get_current_user(), 
     # ... 
    }) 

class MyHandler(BaseHandler): 
    def get(self): 
    self.render_template('my.html', {'foo': 'bar'}) 
0

我認爲您正在尋找類似login_required decorator in django的東西。您可以嘗試使用完整的django framework in GAE(我從未嘗試過),也可以使用decoration輕鬆進行自定義,並添加您自己的行爲。在你的情況下,將用戶的登錄狀態傳遞給模板引擎是一個好主意。

#the decorator 
def login_checked(f): 
    def wrap(request, *args, **kwargs): 
     # get current user 
     user = get_current_user() 
     template_path, vars = f(request, *args, **kwargs)   
     vars['user']= user 
     template.render(template_path, vars) 
    return wrap 

# usage 
class MyPage(webapp.RequestHandler): 
    @login_checked # add a decoration 
    def get(self): 
     # your page  
     return "the_template_page_you_want", {"the value you want to pass to template": "xxx"} 
-2

看看這個例子:

from google.appengine.api import users 

class MyHandler(webapp.RequestHandler): 
    def get(self): 
     user = users.get_current_user() 
     if user: 
      greeting = ("Welcome, %s! (<a href=\"%s\">sign out</a>)" % 
         (user.nickname(), users.create_logout_url("/"))) 
     else: 
      greeting = ("<a href=\"%s\">Sign in or register</a>." % 
         users.create_login_url("/")) 

     self.response.out.write("<html><body>%s</body></html>" % greeting) 

來源:http://code.google.com/appengine/docs/python/users/loginurls.html

+0

因爲問題是明確有關模板,這真的是沒有幫助的。 –