【问题标题】:In Pyramid, using traversal, how do create dynamic urls?在 Pyramid 中,使用遍历,如何创建动态 url?
【发布时间】:2011-06-28 08:47:46
【问题描述】:

我是 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 是我想要的首选,即使它可以通过任何一种方式完成。我真正坚持的是如何将这些类别添加到我的资源树中。

【问题讨论】:

    标签: python traversal pyramid


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      相关资源
      最近更新 更多