Вызов другого представления в Pyramid

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

14
задан aculich 27 November 2011 в 06:02
поделиться