2

考虑以下 Pyramid 应用程序:

from pyramid.config import Configurator

class Foo(dict):
    pass

def make_root(request):
    return {'foo': Foo()}

def foo(request):
    return request.subpath

def bar(request):
    return {"whoami": "bar", "subpath": request.subpath}

def start(global_config, **settings):
    config = Configurator(settings=settings)
    config.set_root_factory(make_root)
    config.add_view(foo, context=Foo, renderer="json")
    config.add_view(bar, name="bar", context=Foo, renderer="json")
    return config.make_wsgi_app()

/foo这个应用程序使用 Traversal并且响应/foo/bar很好。我想知道,在遍历时/foo/booarns,是否有一些地方可以在 Traversal 决定返回 404 之前挂钩。类似于默认或后备视图:

config.add_view(any_other, name="*default*", context=Foo, ...)

然后,只要路径的第二个组件没有绑定到任何其他视图,在相同的上下文中,这个视图就会被调用,并且路径组件仍然可用request.view_namerequest.subpath

4

3 回答 3

4

我认为containment谓词在这里仍然有效。

@notfound_view_config(containment=Foo)
def notfound(request):
    return HTTPNotFound('no views for Foo detected for view %s' % request.view_name)
于 2012-07-17T17:06:24.577 回答
0

根据文档,您只需为名称指定一个空字符串:

config.add_view(any_other, name="", context=Foo, ...)
于 2012-07-17T15:01:19.120 回答
0

当 Pyramid 无法将 URL 映射到查看代码时,它会触发“未找到视图”。默认的“未找到视图”可以通过应用程序配置覆盖使用以下内容:

from pyramid.view import notfound_view_config

@notfound_view_config()
def notfound(request):
    return Response('Not Found, dude', status='404 Not Found')

def main(globals, **settings):
   config = Configurator()
   config.scan()
于 2012-07-17T15:20:57.290 回答