4

私は Pyramid を初めて使用し、アプリケーションを作成しました。カテゴリのテーブルを含むデータベースがあります。カテゴリは属性 Red と Green を持つ色で、別のカテゴリは属性 4 と 5 を持つサイズかもしれません。domain.com/{category} のようなリンクを作成できるようにしたいと考えています。では、2 つのカテゴリ テンプレートがあるとします。1 つは color.mak で、もう 1 つは size.mak です。domain.com/Red または domain.com/Green が color.mak をレンダリングし、domain.com/4 または domain.com/5 が size.mak をレンダリングするようにするにはどうすればよいですか? URL ディスパッチとトラバーサルの違いを読んだ後、トラバーサルはどちらの方法でも実行できますが、私が望むものには優先されるようです。私が本当にこだわっているのは、これらのカテゴリをリソース ツリーに追加する方法です。

4

1 に答える 1

6

まず、ルート リソースが からさまざまなリソース タイプを返すようにします__getitem__

class Root(object):
    def __getitem__(self, key):
        if key in ['Red', 'Green']:
            return ColorCategory(key)
        elif key in ['4', '5']:
            return SizeCategory(key)

class ColorCategory(object):
    ...

class SizeCategory(object):
    ...

次に、__init__.py で、さまざまなリソース タイプ (別名コンテキスト タイプ) に対してさまざまなビューを構成する必要があります。

    config.add_view('myapp.views.color',
                context='myapp:resources.ColorCategory', name='',
                renderer='myapp:templates/color.mak')

    config.add_view('myapp.views.size',
                context='myapp:resources.SizeCategory', name='',
                renderer='myapp:templates/size.mak')

これが機能する方法は、特定の URL を取得すると、Traversal が特定のコンテキストとビュー名を検索することです。domain.com/Red の場合、コンテキストはColorCategory('Red')(ルート リソースが返すものであるため) になり、ビュー名は''(そのコンテキストを検索した後にパスが完全に消費されるため) になります。次に、ピラミッドはコンテキスト タイプとビュー名をフィルターとして使用して、構成されたビューとテンプレートを検索します。

于 2011-06-28T00:47:46.400 に答える