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()

このアプリケーションは Traversal を使用し、正常に応答し/fooます/foo/bar。トラバースするときに/foo/booarns、トラバーサルが 404 を返すことを決定する前にフックする場所があるかどうか疑問に思っていました。デフォルトまたはフォールバックビューのようなもの:

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

次に、同じコンテキスト内で、パスの 2 番目のコンポーネントが他のビューにバインドされていないときはいつでも、このビューが呼び出され、パス コンポーネントはrequest.view_nameおよびとして引き続き使用できますrequest.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

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 に答える
0

docs によると、名前に空の文字列を指定するだけです:

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