Моя цель: в Pyramid вызвать другой вызываемый вид и вернуть объект Response
, не зная никаких подробностей об этом вызываемом представлении.
В моем приложении Pyramid, скажем, у меня есть представление "foo", которое определяется с помощью декоратора view_config:
@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 для перенаправления клиента на целевой маршрут - это то, чего я пытаюсь избежать. Я хочу «внутренне» перенаправить).