Anastasios Hatzis (Hatzis Edelstahlbearbeitung)
ah at hatzis.de
Tue May 30 12:42:13 EDT 2006
Dear list members, I'm still struggling with my PSP files. I like the embedding feature very much, but there is one issue I don't know how to solve and couldn't find a hint in the manual or web. It's about redirecting and/or re-generation of the HTML output depending on object states. I recognized that PSP obviously by default sends header/output directly to the client. My first approach: I built a web-layer consisting of PSP-files only. They were called from a browser and each of them imported and accessed appropriate Python modules of my back-end application. These PSP files also included some other PSP files containing HTML snipplets. Structure was simplified like this examplePage.psp: a) include head.psp b) do something with the back-end (imported Python modules with database-access) and build body c) include foot.psp head.psp and foot.psp also contained some condition-dependent output. When specified conditions are met during processing of the request, it is necessary to either redirect to another URL - typical example would be a redirect to a sign-on form - or to re-generate partially or totally the HTML output. Unfortunatelly this can occur anywhere in a), b) or c), where PSP already have been included. I learned that I neither can clear and re-generate the already generated HTML output, nor use a util.redirect to another (PSP) file. Latter leads to the following error message: IOError: Cannot redirect after headers have already been sent. My second approach was to use mod_python.publisher instead of psp, where methods in py files are called, e.g. http://www.modpython.org/examplePage.py/view?objectID=5 calling in examplePage.py the method view(req, objectID) which should then call an appropriate py-file which is responsible for importing the back-end modules and including PSP-files. For latter I used the template suggestion as made in the modpython manual: template = psp.PSP(self.oReq(), filename='../src/psp/head.psp') template.run({'txtPageTitle':'hello world'}) Unfortunatelly this doesn't help since PSP.run() is also directly sending header to the browser. So, I'm ending with the question if there are options or how-tos in order to a) prevent PSP files from sending headers to the browser, so I can later in the process do a full re-direct, like util.redirect, if necessary b) collecting PSP file outputs in objects and deciding myself which to send and which not to send, something like: template = psp.PSP(self.oReq(), filename='../src/psp/head.psp') htmlHead = template.run({'txtPageTitle':'hello world'}) template = psp.PSP(self.oReq(), filename='../src/psp/ExampleBody.psp') htmlBody = template.run({'txtPageTitle':'hello world'}) template = psp.PSP(self.oReq(), filename='../src/psp/foot.psp') htmlFoot = template.run({'txtPageTitle':'hello world'}) if simpleHead: htmlHead = '<html><body>' return htmlHead + htmlBody + htmlFoot A link to documentation or how-to would be great or any good idea is appreciated. Many thanks again and greetings from southern Germany (snowing here, hurrrr) Anastasios
|