pyramid_handlers无法正常工作

时间:2011-09-28 19:02:27

标签: python pyramid restful-architecture akhet

我目前正在将一个项目从Pylons 1.0转移到金字塔。

到目前为止,我的问题是如何在金字塔中使用宁静的路线。我目前正在使用pyramid_handlers,因为它似乎是一个好的开始。我正在使用Akhet。

所以这是我路线中的两条重要线路:

config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts")
# or 
config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts", action="new")

我的行动:

@action(name="new_account", renderer='accounts/new.mako', request_method='GET')

错误:

 TypeError: 'Accounts' object is not callable
 or
 ValueError: Could not convert view return value "{}" into a response Object.

帐户...到目前为止一直很好,很容易理解pyramid_handlers似乎没有正常注册或处理名称,因为它应该......在request.matched_route中说,我确实有“new_account”

如果我在路由定义中添加“action ='new'”,它将找到该函数,但它不会侦听动作定义。换句话说,它将无法找到渲染器并期望响应对象。 request_method参数实际上没有做任何事情,因此删除它不会改变任何结果。

简而言之,@action(name="..."不起作用。 Pyramid无法自行找到函数,如果定义了函数名,则无法执行action语句。

不知道我做错了什么。

正确的方法。

config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts", action="new_account")

修改

route_name可能会被url生成器函数使用。虽然action是@action中的实际名称。据我所知,@ action name是route_name而不是action name。这现在更有意义了。

1 个答案:

答案 0 :(得分:0)

呼叫add_handler需要一个行动模式。因此,要么将{action}添加到网址模式,要么将action=设置为参数。这些操作必须与@action装饰器中定义的名称匹配。在您的示例中,您将操作命名为new_account,但您使用add_handler的操作调用了new。因此它们没有正确连接。