我的目标:在 Pyramid 中,调用另一个 view-callable,并在不知道有关该 view-callable 的任何细节的情况下获取 Response
对象。
在我的 Pyramid 应用程序中,假设我有一个 View “foo”,它是使用 view_config 装饰器定义的:
@view_config(route_name="foo",
renderer="foo.jinja2")
def foo_view(request):
return {"whereami" : "foo!"}
现在说我想将“bar”路由到一个暂时做同样事情的 View ,所以它在内部调用 foo_view
并返回它的响应:
@view_config(route_name="bar")
def bar_view(request):
return foo_view(request)
...但是等等!这是行不通的,因为 foo_view
不返回 Response
,它的 renderer 会返回。
所以,这会起作用:
@view_config(route_name="bar",
renderer="foo.jinja2")
def bar_view(request):
return foo_view(request)
因为它将应用与 foo_view
相同的渲染器。但这很糟糕,因为我现在必须通过复制渲染器值并必须知道被调用 View 的渲染器来重复自己。
所以,我希望 Pyramid 中有一些可用的函数,允许调用另一个 View 调用并在不知道或不关心它是如何呈现的情况下获取 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
似乎按名称搜索 View ;我不想给我的观点命名。
(注意:返回 HTTPFound 导致客户端重定向到目标路由是我试图避免的。我想“内部”重定向)。
最佳答案
是的。有一些顾虑
- 不返回响应
- 谓词/呈现器
- 权限
- 与旧请求关联的请求属性
这就是为什么你不应该从 View 调用 View 作为函数,除非你知道你在做什么
Pyramid 创建者为服务器端重定向做了很棒的工具 - http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/subrequest.html
关于python - 在 Pyramid 中调用另一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7048235/