【问题标题】:Pyramid Traversal & URL Dispatch & Differing RootsPyramid Traversal & URL Dispatcher 和不同的根
【发布时间】:2012-03-07 17:11:27
【问题描述】:

从我的question 中了解遍历以及整个资源和上下文概念后,我尝试了一些教程示例,这些示例使用文档中所述的混合路由。如果不是一些小问题,我有点理解:

如果我要遍历以下 URL:http://example.com/product/123/edit,并带有以下 add_route 配置:

config = Configurator(settings=**settings, root_factory=RootFactory)
config.add_route('product_edit', '/product/{pid}/edit', factory=ProductFactory, traverse='/{pid}/edit')

config.add_view(route_name='product_edit', name='edit', renderer='edit.mako')
  1. 是不是说当我给 add_route 函数提供一个产品工厂时,根资源工厂变成了产品工厂(因此产品工厂现在是新的根资源)?

  2. 如果根资源确实更改为 ProductFactory 进行遍历,我将 ProductFactory 的 __parent____name__ 属性设置为什么?因为看起来__parent__ 将是None,对吗?

这是我的 ProductFactory 代码:

class ProductFactory(object):
    __name__ = 'product'
    __parent__ = None

    def __getitem__(self, key):
        if key.isnumber():
            try:
                p = sess_.query(model.Product).filter(pid=key).one()
            except:
                raise DBException()
            if p:
                return p
            else:
                return KeyError

【问题讨论】:

    标签: python pyramid


    【解决方案1】:

    “工厂”参数告诉金字塔使用它来确定该路由的上下文(并间接确定 acl)。

    根据定义,根资源没有父级。所以 parent 确实没有。现在查看您的代码,我不确定它是否会起作用,但这应该可以完成您想要的。

    config = Configurator(settings=**settings, root_factory=RootFactory)
    config.add_route('product_edit', '/product/*traverse', factory=ProductFactory)
    
    config.add_view(route_name='product_edit', name='edit', renderer='edit.mako', context=model.Product)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      相关资源
      最近更新 更多