Re: redirect klappt nicht

"Jens W. Klein" <[email protected]>
Newsgroups gmane.comp.web.zope.german
Organization Klein & Partner KEG, BlueDynamics Alliance
Message-ID <1229536823.9826.24.camel@minime>
Am Mittwoch, den 17.12.2008, 11:45 +0100 schrieb T.Hinze:
> ich habe ein Problem mit dem Versuch einen Redirect aus einer
> BrowserView-Methode heraus auszuführen.

Das geht normalerweise wunderbar :)

> Ich lande beim Aufruf meiner Methode xyz() in selbiger und dort steht
> testweise
> 
> def xyz(self):
>   self.request.response.redirect('xyz')
>   print 'redirect failed'
> 
> 
> Rufe ich also diese Methode auf, so erscheint mir in der Console der
> String 'redirect failed'. D.h. der redirect() wird ignoriert.

Nein, das heisst das nicht. Die "redirect"-Methode auf dem "response"-
Objekt setzt lediglich den Redirect Header. Sieh hierzu im Code
ZPublisher.HTTPResponse.HTTPResponse.redirect

Dein Programm wird ganz normal weiter abgearbeitet und deine Seite
publiziert, der Browser redirected dann entsprechend dem Header und dem
Status-Code (302 per default). Das Verfahren hat den Nachteil, dass
trotzdem alles gerendert wird.

Du kannst 
a) das Verhalten verbessern, indem du die __call__ Methode Deiner
View-Klasse überschreibst und ganz zu Anfang checkst ob ein Redirect
notwendig ist, wenn ja, das Redirect auf dem Response setzen (wie Du es
machst) und return. Wenn nein, dann das Template rendern (z.B. mit
"super" die __call__ methode der Basisklasse rufen).
b) auch einen "raise Redirect('someurl')" machen (Redirect aus dem
package zExceptions importieren). Dann bricht Dein Programmteil ab, der
Publisher fängt die Exception ab und redirected. Ich weiss allerdings
nicht, ob diese Methode noch zur Best-Practice gehört.

Jens
-- 
Jens Klein
Software Architect
Managing Director, General Partner
+43 512 890077

BlueDynamics Alliance        WEB APPLICATIONS,  ZOPE,  PLONE, HOSTING
Klein & Partner KEG          production: concept, development, design
http://bluedynamics.com      consulting: analysis, coaching, training
http://zoplo.com             management: projects, process, community



_______________________________________________
zope mailing list
[email protected]
https://mail.dzug.org/mailman/listinfo/zope
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.