Mon objectif : Dans Pyramid, appeler un autre appel de vue, et obtenir un objet Response
sans connaître aucun détail sur cet appel de vue.
Dans mon application Pyramid, disons que j'ai une vue "foo" qui est définie en utilisant un décorateur view_config :
@view_config(route_name="foo",
renderer="foo.jinja2")
def foo_view(request):
return {"oùsuisje" : "foo!"}
Disons maintenant que je veux router "bar" vers une vue qui fait la même chose pour le moment, donc elle appelle foo_view
en interne et renvoie sa Response :
@view_config(route_name="bar")
def bar_view(request):
return foo_view(request)
... mais attendez ! Cela ne fonctionne pas, car foo_view
ne renvoie pas de Response
, son rendu le fait.
Donc, cela fonctionnera :
@view_config(route_name="bar",
renderer="foo.jinja2")
def bar_view(request):
return foo_view(request)
car il appliquera le même rendu que foo_view
l'a fait. Mais c'est mauvais, car maintenant je dois me répéter en copiant la valeur du rendu ET en ayant à connaître le rendu de la vue appelée.
Donc, j'espère qu'il y a une fonction disponible dans Pyramid qui permet d'appeler un autre appel de vue et d'obtenir un objet Response
sans savoir ou se soucier de la façon dont il a été rendu :
@view_config(route_name="bar")
def bar_view(request):
response = some_function_that_renders_a_view_callable(foo_view, request)
return response
Quelle serait some_function_that_renders_a_view_callable
?
pyramid.views.render_view
semble rechercher une vue par nom ; je ne veux pas donner de noms à mes vues.
(Remarque : Retourner HTTPFound pour amener le client à rediriger vers l'itinéraire cible est ce que j'essaie d'éviter. Je veux une redirection "interne").