2011-11-30 26 views
3

我有一個帶有通常樣板鏈接的jinja模板,其中一個是「註銷」鏈接。在渲染頁面之前,必須使用Users.create_logout_url()生成此鏈接的URL。Tipfy&Jinja:爲每個頁面創建一個註銷URL

我想避免必須生成此URL並將其添加到我的render_response爲每個單一的get/post處理程序。我已經研究過替代品,但還沒有找到一個有效的方法來解決這個問題。

BaseRequestHandler

這似乎是最乾淨的做法,但我不知道該如何去做。難道是

self.vars['logout_link'] = users.create_logout_url(self.request.path)) 

..和隨後的情況下,在所有的標準響應處理程序:

return render_response('template.html', **vars) 

裝飾

這似乎是另一種選擇,雖然看起來略顯凌亂。我想它會以相同的方式工作(將註銷鏈接分配給包裝函數中的局部變量)。

上下文處理?

我使用tipfy/jinja,據我所知,似乎並不支持這一點。

任何意見,我應該進一步調查的路徑?

感謝

回答

6

我做了一些與Jinja/GAE類似的工作,我使用了一個BaseHandler +我包含的模板。 BaseHandler:

class BaseHandler(webapp2.RequestHandler): 
    ... 
    def render_jinja(self, name, **data): 
     data['logout_url']=users.create_logout_url(self.request.uri) 
     template = jinja_environment.get_template('templates/'+name+'.html') 
     self.response.out.write(template.render(data)) 

然後,我可以繼承如表單處理的basehandler:

class FileUploadFormHandler(BaseHandler): 
    def get(self): 
     ... 
     self.render_jinja('contact_jinja', form=form, ... 
+1

這似乎是將'globals'添加到render_response的最佳方式 - 謝謝! – Cerzi

+1

作爲獎勵,這是保持模板渲染干燥的絕佳方式。當我複製了幾行代碼來佈置基本的網站結構時,我知道我做錯了什麼。 – Anna

4

具有不使用任何框架,林不知道,如果有一個很好的方式,將其添加到模板中。可能有某種形式的中間件可以實現,但正如我所說的,我沒有這些框架的經驗。

但是,你有沒有想過擁有一個通用的註銷URL,以及一個處理程序,該處理程序將303提供給用戶的正確URL?

+1

通用註銷URL是一個偉大的idea-感謝。 – Cerzi

相關問題