簡體   English   中英

Python:每個應用程序的Mako模板查找

[英]Python: Mako template lookups per app

我正在將Cherryko與Mako用作模板引擎。

我希望Mako根據所請求的應用程序查找不同的目錄。

即我有三個“應用”:站點,管理和安裝。

它們都有自己的模板文件夾,其結構類似於:

  • /模板
  • /模板/網站
  • /模板/管理員
  • /模板/安裝
  • /模板/系統

/ system包含一些系統范圍的模板,例如404頁等。

在嘗試了解cherrypy / mako的同時,我使用了Twiseless作為參考,但是我對如何做到這一點感到困惑

請繼續閱讀,以簡要概述我如何嘗試執行此操作,但請注意:我認為我將完全以錯誤的方式進行操作! :)因此,如果您有任何想法/指針,那么最好自己省下閱讀更多內容的麻煩。

在我的主文件server.py中,執行以下操作:

from libs.plugins.template import MakoTemplatePlugin

engine = cherrypy.engine
makoTemplate = MakoTemplatePlugin(engine, self.base_dir)
setTemplateDirs(makoTemplate, self.template_path)

MakoTemplatePlugin是該插件的稍作修改的版本,其名稱與上面鏈接的Twiseless中的名稱相同。

此代碼的作用是將TemplateLookup設置為使用全局配置文件中的默認模板目錄。

  • /模板
  • /模板/系統

然后,每次加載應用程序時,我都會調用一個函數(setTemplateDirs)來更新Mako搜索的目錄。

我以為這可以用,但不能用。 最初,我為每個應用創建一個新的MakoTemplatePlugin實例時出錯。 這只是導致它們在每次頁面加載時被調用,從實例化的第一個頁面開始,僅包含基本的,非應用程序特定的目錄。

首次調用時,它在錯誤的文件夾中搜索時觸發404錯誤。

相反,我確保將對MakeTemplatePlugin的引用傳遞給所有我的應用程序。 我以為如果每次調用每個應用程序時都運行setTemplateDirs ,這將解決問題……但事實並非如此。

我不知道該函數放在哪里,因此它將在每次請求頁面時運行...

例如

# /apps/site/app.py

import somemodule.setTemplateDirs

class Site(object, params):
    def __init__(self):
        self.params = params
        self.makoTemplate = params['makoTemplate']
        self.base_path = params['base_path']
        setTemplateDirs(self.makoTemplate, self.base_path, '', '/')

    @cherrypy.expose
    @cherrypy.tools.render(template='index.html')
    def index(self):
        pass

顯然,這僅在首次加載應用程序時有效。我嘗試將update函數調用移到單獨的方法update並嘗試為每個頁面調用它,例如:

@cherrypy.exposed
@cherrypy.tools.render(template='index.html')
@update
def index(self):
    pass

但這只是給我與配置有關的錯誤。

與其繼續搞弄這個,還必須有一種更簡單的方法。

你會怎么做?

非常感謝,

湯姆

我工作了。 感謝stephan提供了指向mako工具示例的鏈接: http : //tools.cherrypy.org/wiki/Mako

我只是對其稍作修改以使其正常工作。

如果有人想知道,其基礎是您在全局配置中定義tools.mako.directories ,然后可以在單個應用程序配置文件中覆蓋它。

例如

server.conf

...
tools.mako.directories: ['', 'system']
...

site.conf

...
tools.mako.directories: ['site', 'system']
...

我做了一些額外的工作,將相對URI轉換為絕對路徑,但是上面已經解釋了症結所在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM