2

ここで問題を簡単に説明します。cms のように見えるピラミッドのセットアップがあります。私は基本モデルとして持っています: [アカウント、ページ、エラー、メニュー、構成]

それはかなりうまく機能しますが、私は何かに少し問題があります。現在、私はgitを使用しており、いくつかのブランチでは異なるテンプレートを使用しており、マスターブランチではコアに変更を加えています。

代わりにテーマをインストールできるようにしたいと思います。テーマは、テンプレート ファイル/静的ファイル (css/js) のコレクションになります。

これは entry_points で実現でき、構成ビューでそれらを検索して、インストールされているテーマのリストを表示できます。ここまではできる。

その場でさまざまなテーマを切り替えることができれば、非常に良いスタートになるので、新しいテーマのためだけにプロジェクトをフォークする必要はありません。

2 つ目の問題は、これらのサイトが異なるコンテンツを必要とすることです。たとえば、一方には「質問」が必要で、もう一方には「製品」が必要です。

だから私はこの考えを念頭に置いています

class TemplatePlugin(PyramidPlugin):
    template_path = ''
    static_path = ''

    def register(self, config, app):
        '''Inject the plugin in the application... how I'm not sure yet'''

    def unregister(self):
        '''unregister the plugin if something is needed'''

    def (before/after)_(request/newapp...)(self,...):
        '''do some stuff for some events most are optional'''

モデル用の別のプラグイン

class PyramidPlugin(pyramid_plugin):
    def register(self, config, app):
         '''add routes,
            add view handlers (view_config)
            add models acl to the acl list
         '''

    # other functions similar to the above class to handle events

私の最大の問題は、ファイルをどのように見つけるかです。テストを行う必要がありますが、翻訳とファイルパスが心配です。

エントリポイントでどのように機能するのかは、まだ私には謎です. プラグインはバベル翻訳を使用しますか? テンプレート プラグインでバベル翻訳を使用できますか? エントリ ポイントが読み込まれると、現在のディレクトリはプロジェクトのディレクトリですか、それともエントリ ポイントのディレクトリですか? ディストリビューションで簡単にパスを取得できると思いますが、これをすべて行う正しい方法がわかりません... 鉱山で満たされたまったく新しい土地に入っているような気がします。

4

1 に答える 1

6

Pyramid では、 render_to_reponse関数を使用して実行時にテンプレートを選択できます。しかし、より洗練されたソリューションが必要な場合は、国際化のための「Babel」によるアドオンとルック アンド フィールのカスタマイズを既にサポートしている Pyramid CMS である Kotti に触発されるかもしれません。別の「テーマ」を使用するには、Kotti が使用する規則に従って、いくつかのテンプレートと静的アセットを含む別のパッケージを記述し、.ini 構成ファイルでパッケージをアクティブ化する必要があります。

Kotti がこれを実現する方法を理解するには、この行からコード パスをたどる必要があります。

いずれにせよ、Kotti は Pyramid アプリケーションがどのように構成されているかについていくつかの仮定を立てています。たとえば、ストレージ用の SQLAlchemy、フォーム生成用の formencode、ビューをリソースにマップするためのトラバーサル、つまり YMMV. Pyramid 自体は、これを行う方法について意見を述べていません。

于 2011-11-20T15:59:35.287 に答える