私は 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 ディスパッチとトラバーサルの違いを読んだ後、トラバーサルはどちらの方法でも実行できますが、私が望むものには優先されるようです。私が本当にこだわっているのは、これらのカテゴリをリソース ツリーに追加する方法です。
1374 次
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 に答える