我正在使用Turbogears2开发一个小型Web应用程序。在我的一些“控制器”中,我想在客户端响应一个带有错误信息的json对象而不是标准错误页面模板后面的html页面,因为ajax客户端可以读取错误消息并拥有它自己的方式显示它。
答案 0 :(得分:1)
有多种方法可以实现这一目标。如果它只绑定到某个控制器,您可以轻松地为它们注册一个控制器包装器(使用tg.hooks.wrap_controller
)并在需要时返回JSON
而不是普通错误。控制器包装器记录在http://turbogears.readthedocs.org/en/latest/turbogears/hooks.html#controller-wrappers
否则另一个选择是使用控制器函数上的装饰器来捕获错误。通过tgext.crud
自定义装饰器报告json错误时,catch_errors
也会这样做:https://github.com/TurboGears/tgext.crud/blob/master/tgext/crud/decorators.py#L114
控制器包装器解决方案通常更强大,因为它也可以应用于第三方控制器。否则,您甚至可以使用ErrorController
劫持controllers/error.py
中的json.dumps
以返回json(TurboGears会返回响应,因为它是字符串或tg.Response
实例)。