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