Llamando a otra vista en Pyramid
Mi objetivo: en Pyramid, llamar a otra vista invocable y obtener unaResponse
objeto de vuelta sin conocer ningún detalle sobre esa vista invocable.
En mi aplicación Pyramid, digamos que tengo una vista "foo" que se define usando un decorador view_config:
@view_config(route_name="foo",
renderer="foo.jinja2")
def foo_view(request):
return {"whereami" : "foo!"}
Ahora diga que quiero enrutar "barra" a una vista que haga lo mismo por el momento, por lo que internamente llama afoo_view
y devuelve su Respuesta:
@view_config(route_name="bar")
def bar_view(request):
return foo_view(request)
...¡pero espera! Eso no funciona, ya quefoo_view
no devuelve unResponse
, es renderer hace
Entonces, esto funcionará:
@view_config(route_name="bar",
renderer="foo.jinja2")
def bar_view(request):
return foo_view(request)
as aplicará el mismo procesador quefoo_view
hizo. Pero esto es malo, ya que ahora debo repetirme copiando el valor del renderizador Y teniendo que conocer el renderizador de la vista que se llama.
Entonces, espero que haya alguna función disponible en Pyramid que permita llamar a otra vista invocable y obtener unResponse
objeto de vuelta sin saber o importar cómo se renderizó:
@view_config(route_name="bar")
def bar_view(request):
response = some_function_that_renders_a_view_callable(foo_view, request)
return response
Qué seríasome_function_that_renders_a_view_callable
be?
pyramid.views.render_view
parece buscar una vista por nombre; No quiero dar nombres a mis puntos de vista.
(Nota: lo que intento evitar es devolver HTTPFound para que el cliente redirija a la ruta de destino. Quiero redirigir "internamente").