python - 在 Pyramid 中调用另一个 View

标签 python view pyramid

我的目标:在 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/

相关文章:

java - eclipse RCP : boolean variable to check a View active or not

sql - oracle中如何设置查看 View 的权限?

solr - 如果我使用标准的 celeryconfig,pyramid_celery 有什么好处?

python 日期时间、时间和日历重叠功能

python - 2d 张量列表到一个 3d 张量

mysql - 如何使用一列的值检查另一行的值?

Python Pyramid PServe 拒绝服务

python - 在 Pyramid 中,使用遍历,如何创建动态 url?

python - python 函数返回生成器或普通对象的问题

python - 在 Pandas 的输出中添加唯一值