4

我是 Pyramid 的新手,并创建了一个应用程序。我有一个带有类别表的数据库。一个类别可能是具有红色和绿色属性的颜色,另一个类别可能是具有属性 4 和 5 的大小。我希望能够创建类似于:domain.com/{category} 的链接。假设我有两个类别模板。一个是 color.mak,一个是 size.mak。我将如何获得它,以便 domain.com/Red 或 domain.com/Green 将呈现 color.mak 而 domain.com/4 或 domain.com/5 将呈现 size.mak?在阅读了 URL Dispatch 和 Traversal 之间的区别之后,似乎 Traversal 更适合我想要的东西,即使它可以通过任何一种方式完成。我真正坚持的是如何将这些类别添加到我的资源树中。

4

1 回答 1

6

首先,您希望您的 Root 资源从以下位置返回不同的资源类型__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')(因为这是您的 Root 资源返回的内容)和视图名称将是''(因为在查找该上下文后路径完全被消耗)。然后金字塔将使用上下文类型和视图名称作为过滤器来查找配置的视图和模板。

于 2011-06-28T00:47:46.400 回答