如何让 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)
我们正在使用 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)