Dans une application Pyramide Traversale, comment gérer une ressource avec un __name__
correspondant au nom d'une vue?Pyramid Traversal __name__ correspondant à un nom de vue
Si je voulais accéder à la vue "vue" appelable pour une ressource, j'utiliserais un chemin d'URL comme: /foo/bar/view
. Il traverse la resource_tree comme si:
RootFactory(request) => RootFactory
RootFactory['foo'] => Foo
Foo['bar'] => Bar
Bar['view'] => KeyError
... et parce qu'il ne peut pas traverser Bar passé & « view » qui reste, il suppose que « vue » est le nom de la vue, et qui correspond à mon avis appelable
@view_config(name='view')
def view(context, request):
return Response(context.__name__)
pour obtenir l'URL pour ce chemin j'utiliser request.resource_url(resource, "view"
).
Cependant, si j'avais une ressource telle que Bar.__name__ = "view"
, comment puis-je résoudre une URL pour "voir" sur Foo?
# path: /foo/view
RootFactory(request) => RootFactory
RootFactory['foo'] => Foo # ideally stop here with view_name="view"
Foo['view'] => Bar.__name__ = "view"
# all parts of path matched so view_name="" and context=Bar
Idéalement, dans cette situation, /foo/view
citerais view(Foo, request)
et /foo/view/view
citerais view(Bar, request)
où Bar.__name__ == "view"
.
Existe-t-il un moyen de gérer cela sans écrire de détection pour les collisions entre __name__
et afficher les noms?