0

テンプレートエンジンとしてMakoを使用したcherrypyを使用しています。

Makoに、要求されているアプリに基づいてさまざまなディレクトリを検索してもらいたい。

つまり、サイト、管理者、インストールの3つの「アプリ」があります。

それらはすべて独自のテンプレートフォルダを持っており、構造は次のようになります。

  • /レンプレート
  • / template / site
  • / template / admin
  • / template / install
  • / template / system

/ 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を設定します。すなわち

  • /レンプレート
  • / template / system

次に、アプリが読み込まれるたびに、関数(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

しかし、これは私に設定関連のエラーを与えるだけです。

これをいじり続けるのではなく、もっと簡単な方法が必要です。

どうしますか?

どうもありがとう、

トム

4

1 に答える 1

0

私はこれを機能させました。makoツールの例へのリンクを提供してくれたstephanに感謝します:http://tools.cherrypy.org/wiki/Mako

それを機能させるために少し変更しました。

誰かが疑問に思っている場合はtools.mako.directories、グローバル構成で定義することが基本であり、個々のアプリ構成ファイルでそれをオーバーライドできます。

例えば

server.conf

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

site.conf

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

相対URIを絶対パスに変換するために追加の作業を行いましたが、その要点は上記で説明されています。

于 2013-02-02T12:22:57.657 に答える