Jim Gallacher
jpg at jgassociates.ca
Thu Mar 1 12:51:33 EST 2007
John Ruff wrote: > You are right is was not happening before, my mistake - I went back and > checked. However, I've found that if I change my hello.py to the > following, req.content_type doens't have to be defined. Can you explain > this or point me to some reading? Does this somehow invoke the use of > the mod_python.psp handler No, but the end result is similar. The psp handler sets the content type and calls PSP.run(). > > def hello(req): > s = 'Hello, there!' > return psp.PSP(req, filename = 'hello.tmpl', vars = {'greet':s}) Publisher calls the PSP.__str__() method, which looks like this: def __str__(self): self.req.content_type = 'text/html' self.run() return "" which is where the content_type is getting set. I must admit I am little surprised by the code here... it could be a bit of a gotchya for someone using this particular idiom (publishing a PSP object) to create something other than html and may represent a bug. Perhaps we should be checking to see if the content_type is already set rather than blindly overwriting it, so that a user can explicitly set the type if they need to? Digging a little deeper, mod_python.psp.handler() also hard codes the content_type as 'text/html'. So it would seem that if one wants to generate anything other than 'text/html' one must avoid using the PSP handler, or publisher handler as shown in your example above. Not that this is pertinent to your current question - just an interesting little quirk. Jim > ___________________ > John Ruff > jcruff at gmail.com > GPG Key: 0x1F691195 > FGPR: 6B50 37C9 10F9 6C4A D381 54B8 319D 7DD9 1F69 1195 > > "No one can see past a choice they don't understand." --The Oracle > > > On Mar 1, 2007, at 11:49 AM, Jim Gallacher wrote: > >> John Ruff wrote: >>> Thanks Olaf. Is this a new requirement? It's not mentioned in the >>> PSP 3.3 docs example for templating. Also, I didn't see this issue >>> when previously using 3.2.10. >> >> Were you using *exactly* the same code? If so I'm surprised it worked >> before. >> >> Some of what you are seeing is the result of the way you are using >> mod_python.publisher, rather than a psp issue. First, don't return >> apache.OK from your hello() function. Publisher looks after the apache >> return code for you internally. Publisher will convert whatever is >> returned by the function to a string and write it to the client. If >> req.content_type is not set publisher will examine whatever is >> returned and make a best effort to guess the correct content_type, and >> in this case guesses wrong. You real content is being written directly >> by the run() method of your PSP instance. In this case you must >> explicitly set the content type. Note that if you were using the >> mod_python.psp handler directly it would have guessed the correct >> content type and all would have well. >> >> As for the extra html being written... I have no idea what is going on >> as I can't reproduce that result using the code snippet you've given. >> For me it just returns: >> >> <html> >> <body> >> <h1>Hello, there!</h1> >> </body> >> </html> >> 0 >> >> Jim >> >> >>> Thanks. >>> ___________________ >>> John Ruff >>> jcruff at gmail.com >>> GPG Key: 0x1F691195 >>> FGPR: 6B50 37C9 10F9 6C4A D381 54B8 319D 7DD9 1F69 1195 >>> "No one can see past a choice they don't understand." --The Oracle >>> On Mar 1, 2007, at 10:13 AM, Olaf Stein wrote: >>>> Add >>>> req.content_type = 'text/html' >>>> Before your tmpl.run(vars = {'greet':s}) >>>> >>>> Olaf >>>> >>>> On 3/1/07 9:40 AM, "John Ruff" <jcruff at gmail.com> wrote: >>>> >>>>> I'm trying to understand what I'm doing wrong. I'm using mod_python >>>>> 3.3.1 with apache 2.2.4. The situation is that while trying to use >>>>> PSP as a templating engine, none of the examples work. Yet normal >>>>> 'SetHandler mod_python' with inline html works no problem. >>>>> >>>>> I have the following: >>>>> >>>>> <Directory "/home/<user-dir>/Sites/python"> >>>>> SetHandler mod_python >>>>> PythonHandler mod_python.publisher >>>>> PythonOption mod_python.psp.cache_database_filename "/tmp/ >>>>> pspcache.dbm" >>>>> PythonDebug On >>>>> </Directory> >>>>> >>>>> ====hello.py==== >>>>> from mod_python import apache, psp >>>>> >>>>> def hello(req): >>>>> s = 'Hello, there!' >>>>> tmpl = psp.PSP(req, filename = 'hello.tmpl') >>>>> tmpl.run(vars = {'greet':s}) >>>>> return apache.OK >>>>> >>>>> ====hello.tmpl==== >>>>> <html> >>>>> <body> >>>>> <h1><%=greet%></h1> >>>>> </body> >>>>> </html> >>>>> >>>>> >>>>> Still, I'm presented with a webpage that's raw html of what would >>>>> have been generated. When using firefox's Web Developer toolbar to >>>>> see the generated source I can see that my html has been surrounded >>>>> by an '<html><head></head><body><pre>...</pre></body></html>' block. >>>>> So it looks like this: >>>>> >>>>> [snip] >>>>> >>>>> <html><head></head><body><pre><!DOCTYPE html PUBLIC "-//W3C//DTD >>>>> XHTML 1.0 Strict//EN" >>>>> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >>>>> >>>>> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >>>>> lang="en"> >>>>> <head> >>>>> <meta http-equiv="Content-Type" content="text/html; >>>>> charset=utf-8"/> >>>>> >>>>> <title>hello</title> >>>>> >>>>> >>>>> </head> >>>>> >>>>> <body> >>>>> <h1>Hello, there!</h1> >>>>> </body> >>>>> </html> >>>>> </pre></body></html> >>>>> >>>>> [/snip] >>>>> >>>>> Any ideas why this is happening? >>>>> ___________________ >>>>> John Ruff >>>>> jcruff at gmail.com >>>>> GPG Key: 0x1F691195 >>>>> FGPR: 6B50 37C9 10F9 6C4A D381 54B8 319D 7DD9 1F69 1195 >>>>> >>>>> "No one can see past a choice they don't understand." --The Oracle >>>>> >>>>> >>>>> _______________________________________________ >>>>> Mod_python mailing list >>>>> Mod_python at modpython.org >>>>> http://mailman.modpython.org/mailman/listinfo/mod_python >>>> >>>> >>>> >>>> >>>> >>>> ------------------------- >>>> Olaf Stein >>>> DBA >>>> Center for Quantitative and Computational Biology >>>> Columbus Children's Research Institute >>>> 700 Children's Drive >>>> phone: 1-614-355-5685 >>>> cell: 1-614-843-0432 >>>> email: steino at ccri.net >>>> >>> _______________________________________________ >>> Mod_python mailing list >>> Mod_python at modpython.org >>> http://mailman.modpython.org/mailman/listinfo/mod_python >> > >
|