添加上下文后找不到视图
View is not found after adding a context
我正在尝试将 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
。
为什么突然找不到这条路线?这几乎完全是从教程中复制的。
您不应在 view_config
中指定上下文,而应在您的路由中指定工厂。
config.add_route('foo', '/foo', factory=lambda r: Foo(r))
此外,您可能必须在 __init__
:
中接受请求
class Foo:
def __init__(self, request):
pass
__acl__ = [
(Allow, Everyone, 'view'),
]
你这样做的方式(在 view_config
中使用 context
)意味着 "if the context is Foo
, use that view function"。这是一个谓词。
我正在尝试将 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
。
为什么突然找不到这条路线?这几乎完全是从教程中复制的。
您不应在 view_config
中指定上下文,而应在您的路由中指定工厂。
config.add_route('foo', '/foo', factory=lambda r: Foo(r))
此外,您可能必须在 __init__
:
class Foo:
def __init__(self, request):
pass
__acl__ = [
(Allow, Everyone, 'view'),
]
你这样做的方式(在 view_config
中使用 context
)意味着 "if the context is Foo
, use that view function"。这是一个谓词。