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