1

私はピラミッドを使用してワークフローアプリを作成しており、アプリケーションをモジュール化可能にする方法を探しています。つまり、sqlalchemy モデルを使用してコアアプリを作成し、wtforms を使用してベースフォームを作成し、mako を使用していくつかのベーステンプレートを作成します。

「コア」アプリの基本構造は次のとおりです。

    App_Core/core.ini
            /setup.py
            /...
            /App_Core/
                    /__init__.py
                    /models.py
                    /forms.py
                    /utils.py
                    /templates/
                    /templates/base.mako...
                    /static/
                    /static/staticfiles...

私の目標は、コア アプリに含まれるワークフローごとに 1 つのアプリケーションを作成することです。

たとえば、次のように、core.ini ファイルを介して各ワークフローを含めたいと考えています。

pyramid.includes =       
   workflow_app1
   workflow_app2
   workflow_app3
   ...

次の構造で、workflow_app1という名前の新しいアプリを定義しました。

worflow_app1/
            /setup.py
            /...
            /workflow_app1/
                         /__init__.py
                         /models.py
                         /forms.py
                         /views.py
                         /templates/
                         /templates/workflow_app1.mako
                         /...

_ init _.pyファイルには includeme 関数が含まれ、新しいルートが定義されます

def includeme(config):
    config.add_route('route1', '/route1/')
    config.add_route('route2', '/route2/')
    config.scan()

worflow_app1 のビューを作成しているときに、そのアプリに含まれているテンプレートにレンダリングしていますが、コア アプリから呼び出すと、テンプレートをレンダリングできず、次のエラーが発生します。

TopLevelLookupException: Cant locate template for uri 'workflow-app1.mako'

このエラーは、 mako.directories ディレクティブがパスApp_Core_PATH/templatesで指定されているため、非常に論理的な原因であるため、テンプレートは同じフォルダーにある必要があります。

質問1: モジュールの各フォルダ内のマコ検索を希望のテンプレートにすることはできますか?

質問2: コアアプリのbase.makoをworkflow-app1.makoに継承させることはできますか?

ご回答ありがとうございます。

4

1 に答える 1

1

私がお勧めする解決策は、テンプレートのアセット スペックに切り替えることです。それらは明示的であり、オーバーライドを許可し、テンプレート階層をより適切に制御できます。これは、使用をやめmako.directories、代わりに or または 引数で使用'workflow_app1:templates/workflow_app1.mako'するinheritsことincluderenderer意味します。base.makoこれを考えると、コア アプリでから継承できることは明らかですが、mako.directoriesオプションの管理はより困難です。

行き詰まっている場合mako.directoriesは、にパッケージを追加するたびに行を追加できますpyramid.includes

mako.directores = 
    App_Core:templates
    workflow_app1:templates
    workflow_app2:templates

もう 1 つのオプションは、プラグインが事後に検索パスを追加する機能を備えているため、jinja2 に切り替えることです。したがって、含まれているモジュールはconfig.add_jinja2_search_path(...)、検索順序に自分自身を投入できます。Pyramid の mako 統合は、現在このオプションを提供していません。

于 2013-04-16T16:05:05.063 に答える