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