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.
<br /> class ResourceView(Explicit):<br /> """<br /> Simple view redirecting to Resources. Ok, not as simple as thought, but works.<br /> """</p> <p> def __before_publishing_traverse__( self, obj, request=None ):<br /> if self.request['TraversalRequestNameStack']:<br /> self.request.form['resource'] = self.request['TraversalRequestNameStack']<br /> self.request['TraversalRequestNameStack'] = []<br /> else:<br /> pass</p> <p> def nozope(self):<br /> self.request.form['resource'].reverse()<br /> resourcepath = '/'.join(['++resource++nozope']+self.request.form['resource'])<br /> obj = self.context.unrestrictedTraverse(resourcepath).__of__(self)<br /> method = obj.__browser_default__(self.request)[][]<br /> return getattr(obj, method)()<br />