Das brauche ich bestimmt nochmal: Einen View machen, der etwas anderes heraussucht, in diesem Fall eine Ressource. Der erste Versuch war, in der Methode einfach die Ressource rauszusuchen und dann zurückzuliefern – das klappt nicht, weil der ZPublisher versucht, weiterzutraversieren. Daher hier die Methode, den “TraversalRequestNameStack” vor der Rückgabe zu löschen.
class ResourceView(Explicit):
"""
Simple view redirecting to Resources. Ok, not as simple as thought, but works.
"""
def __before_publishing_traverse__( self, obj, request=None ):
if self.request['TraversalRequestNameStack']:
self.request.form['resource'] = self.request['TraversalRequestNameStack']
self.request['TraversalRequestNameStack'] = []
else:
pass
def nozope(self):
self.request.form['resource'].reverse()
resourcepath = '/'.join(['++resource++nozope']+self.request.form['resource'])
obj = self.context.unrestrictedTraverse(resourcepath).__of__(self)
method = obj.__browser_default__(self.request)[1][0]
return getattr(obj, method)()