Уверен, это не сработает. Вот что произошло, когда я попробовал это сделать: ValueError: Не удалось преобразовать возвращаемое значение вызываемого метода представления foo_view класса example.views.ExampleViews в объект ответа. Возвращаемое значение было {'whereami': 'foo!'}. Возможно, вы забыли определить средство визуализации в конфигурации представления.

ель: в Пирамиде, вызвать другую вызываемую точку зрения и получить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 сделал. Но это плохо, так как теперь я должен повторить себя, скопировав значение рендерера и узнав о рендерере вызываемого представления.

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

Ответы на вопрос(6)

Ваш ответ на вопрос