添加上下文后找不到视图

时间:2017-11-15 12:05:21

标签: python acl pyramid

我试图将ACL添加到Pyramid项目中的视图

我已经完成了最低限度的测试:

config.add_route('foo', '/foo')

视图:

@view_config(route_name='foo', renderer='../templates/foo.jinja2',
             permission='view', context=Foo)
def foo(request):
    return {}

上下文:

class Foo:
    __acl__ = [
        (Allow, Everyone, 'view'),
    ]

如果没有设置权限和上下文,哪个效果很好,但添加后,我会得到pyramid.httpexceptions.HTTPNotFound: /foo

为什么突然找不到这条路线?这几乎完全是从教程中复制的。

1 个答案:

答案 0 :(得分:1)

您不应在view_config中指定上下文,而是在路线中指定工厂。

config.add_route('foo', '/foo', factory=lambda r: Foo(r))

此外,您可能必须接受__init__

中的请求
class Foo:
    def __init__(self, request):
        pass

    __acl__ = [
        (Allow, Everyone, 'view'),
    ]

您的方式(使用context中的view_config)表示“如果上下文为Foo,请使用该视图函数”。这是一个谓词。