【发布时间】:2011-10-26 06:26:46
【问题描述】:
我的目标:在 Pyramid 中,调用另一个 view-callable,并在不知道该 view-callable 的任何细节的情况下取回 Response 对象。
在我的 Pyramid 应用程序中,假设我有一个使用 view_config 装饰器定义的视图“foo”:
@view_config(route_name="foo",
renderer="foo.jinja2")
def foo_view(request):
return {"whereami" : "foo!"}
现在说我想将“bar”路由到一个暂时做同样事情的视图,所以它在内部调用foo_view并返回它的响应:
@view_config(route_name="bar")
def bar_view(request):
return foo_view(request)
...但是等等!这不起作用,因为foo_view 不会返回Response,它的渲染器 会。
所以,这将起作用:
@view_config(route_name="bar",
renderer="foo.jinja2")
def bar_view(request):
return foo_view(request)
因为它将应用与foo_view 相同的渲染器。但这很糟糕,因为我现在必须通过复制渲染器值来重复自己,并且必须知道被调用视图的渲染器。
所以,我希望 Pyramid 中有一些可用的函数,允许调用另一个可调用视图并返回 Response 对象,而无需知道或关心它是如何呈现的:
@view_config(route_name="bar")
def bar_view(request):
response = some_function_that_renders_a_view_callable(foo_view, request)
return response
some_function_that_renders_a_view_callable 会是什么?
pyramid.views.render_view 似乎按名称搜索视图;我不想给我的观点命名。
(注意:返回 HTTPFound 导致客户端重定向到目标路由是我试图避免的。我想“内部”重定向)。
【问题讨论】: