考虑以下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
和/foo/bar
就好了。我想知道,当遍历/foo/booarns
时,在Traversal决定返回404之前是否有一些地方可以挂钩。像默认或后备视图:
config.add_view(any_other, name="*default*", context=Foo, ...)
然后,只要路径的第二个组件未绑定到任何其他视图,就会在相同的上下文中调用此视图,路径组件仍可用作request.view_name
和request.subpath
。
答案 0 :(得分:4)
我认为containment
谓词仍然适用于此。
@notfound_view_config(containment=Foo)
def notfound(request):
return HTTPNotFound('no views for Foo detected for view %s' % request.view_name)
答案 1 :(得分:0)
According to the docs,您只需要为名称指定一个空字符串:
config.add_view(any_other, name="", context=Foo, ...)
答案 2 :(得分: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()