Моя цель: в Pyramid вызвать другой вызываемый вид и вернуть объект Response
, не зная подробностей об этом вызове.
В моем приложении Pyramid, скажем, у меня есть представление "foo", которое определяется с помощью декоратора view_config:
@view_config(route_name="foo",
renderer="foo.jinja2")
def foo_view(request):
return {"whereami" : "foo!"}
Теперь скажите, что я хочу направить "бар" на представление, которое делает то же самое на данный момент, поэтому он внутренне вызывает 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
. Но это плохо, так как теперь я должен повторить себя, скопировав значение renderer и должен знать рендерер вызываемого вида.
Итак, я надеюсь, что в 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, чтобы заставить клиента перенаправлять на целевой маршрут, я пытаюсь избежать. Я хочу "внутренне" перенаправить).