Моя цель: в 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, чтобы клиент перенаправлялся на целевой маршрут. Я хочу «внутренне» перенаправить).