如何让 Pyramid invoke_subrequest 通过 view_config 上下文路由进行错误处理

How to have Pyramid invoke_subrequest to go through view_config context routing for error handling

我们正在使用 request.invoke_subrequest() 到 运行 来自 Python 代码的视图。

我们希望 subrequests 响应通过为错误 (context routing) 定义的视图。

例如,如果我们定义几个这样的错误视图:

@view_config(context=requests.exceptions.HTTPError)
def response_error(context, request):
    if context.response.status_code == 412:
        return httpexceptions.HTTPPreconditionFailed()
    # [...]

当对每种 context 使用 subrequests 时,您如何执行它而不必为每种类型添加 except close?

理想情况下,我们希望获得类似的东西(例如虚构的 view_lookup() 函数):

try:
    subresp = request.invoke_subrequest(subrequest)
except Exception as e:
    subresp = view_lookup(e)(subrequest)

invoke_subrequest()中使用use_tweens=True似乎也没有执行错误视图。

有没有办法显式调用 view lookup 以便我们获得 subresponse 就好像它已经通过 view_config 错误处理程序一样?

你要找的大概是:pyramid.view.render_view_to_response

from pyramid.view import render_view_to_response

try:
    subresp = request.invoke_subrequest(subrequest)
except Exception as e:
    subresp = render_view_to_response(e, subrequest)