2014-01-13 25 views
0

對於CherryPy使用Genshi模板引擎,我需要一個上下文相關的站點導航,它爲登錄用戶顯示不同的菜單。Genshi和CherryPy中的上下文相關導航

用戶由CherryPy會話標識。

什麼是爲登錄用戶顯示不同菜單的最佳方式?

+0

用戶如何登錄? –

+0

登錄是通過用戶/密碼執行的,該用戶/密碼對數據庫進行身份驗證並設置包含身份驗證密鑰的會話。它使用這個:http://tools.cherrypy.org/wiki/AuthenticationAndAccessRestrictions –

回答

1

我們檢查,如果用戶登錄...

import cherrypy 
from genshi.template import TemplateLoader 

@cherrypy.expose 
def index(self): 
tmpl = loader.load('index.html') 

if(cherrypy.session.get('_cp_Email')): 
    return tmpl.generate(title='Geddit').render('html', LoggedIn=True) 
else: 
    return tmpl.generate(title='Geddit').render('html', LoggedIn=False) 

模板想這樣的事情...

  if (LoggedIn) { 
       # Logged In menu 
      } else { 
       # not Logged In menu 
      } 

如果他們是我們發送一個變量到模板來顯示註銷而不是登錄。

我們使用這種身份驗證...

http://tools.cherrypy.org/wiki/AuthenticationAndAccessRestrictions

包括出於安全原因的評論。 希望這有助於!

+0

謝謝安德魯,我使用與你相同的身份驗證方法。我一直在想有一種原生Genshi的方式,但基本上我會爲登錄用戶提供一個完全不同的菜單系統。在此基礎上,我想我可以將模板的菜單類型作爲字符串發送,然後讓Genshi檢查menu_type。因此CherryPy將管理決策邏輯,同時將Genshi作爲展示引擎。你同意嗎? –

+1

我更新了我的答案,向您展示瞭如何在同一模板中完成此任務。但是你想通過include發送任一菜單模板來保持它的模塊化... http://genshi.readthedocs.org/en/latest/api/template/#genshi.template.base.Template.INCLUDE –

+1

本文可能幫助更好地解釋它... http://renesd.blogspot.com/2010/02/genshi-templates-headerfooter-templates.html此外這個線程是有幫助的... https://groups.google.com/forum/ #!話題/元史/ ja7eM3y36dE –