Jim Gallacher
jg.lists at sympatico.ca
Thu May 12 10:33:41 EDT 2005
Wouter van Marle wrote: > On Wed, 2005-05-11 at 22:33 -0400, Jim Gallacher wrote: > >>Wouter van Marle wrote: >> >>>On Wed, 2005-05-11 at 14:39 -0400, Jim Gallacher wrote: >>> >>> >>>>Wouter van Marle wrote: >>>> >>>> >>>>>Hi all, >>>>> >>>>>I've a problem using the psp functions. >>>>>What I am doing: >>>>>I've a psp page, using some in-line python code, in between <% and >> >>%> >> >>>>>tags as per many examples. I however get all the time syntax errors >> >>when >> >>>>>running this through the psp.PSP.run() function. I'm sure my python >> >>code >> >>>>>as such is correct, so I'm at a loss here. Some code: >>>>> >>>>>page.psp: >>>>><html><head> >>>>><!-- rest of the header and so --> >>>>></head> >>>>><p> some text for the page </p> >>>>><% >>>>>for r in Results: >>>>>%> >>>>>I got the result <%=r%><br> >>>>><% >>>>># end indentation >>>>>%> >>>>> >>>>>then in my python program I have made a list Results, containing >> >>strings. >> >>>>>page = psp.PSP(req, "page.psp") >>>>>page.run({"Results": Results}) >>>>> >>>>>When running it like that, in my browser an error message appears >> >>giving >> >>>>>a syntax error, pointing at the "for" in the loop. >>>>> >>>>>Now from the documentation I can not find anything that would >> >>forbid >> >>>>>this. I haven't tried to set up a psp handler in apache, as I do >> >>not >> >>>>>intend to use this as such. I want to be able to pass a list of >> >>results >> >>>>>to the page, and then have the page fill itself, as smart template. >> >>The >> >>>>>main code should be out of the page. >>>>> >>>> >>>>You found one of the warts in psp. Since your for loop contains no >>>>further python statements, the parser gets confused. Try adding a >> >>single >> >>>>comment at the beginning of your for loop: >>>> >>>><p> some text for the page </p> >>>><% >>>>for r in Results: >>>> # begin indentation - comment fixes the syntax error >>>>%> >>>>I got the result <%=r%><br> >>>><% >>>># end indentation >>>>%> >>> >>> >>>Still the same problem, Jim. >>>I've also tried with comment before the 'for' statement, doesn't >> >>make >> >>>any difference :( >>> >>>Wouter. >>> >> >>Actually, I was using the comment after the for statement to fix a >>slightly different problem. I've tested the snippet for the psp page >>you >>posted before and it works for me. Perhaps you could post the actual >>traceback? > > > Mod_python error: "PythonHandler mod_python.publisher" > > Traceback (most recent call last): > > File "/usr/lib/python2.3/site-packages/mod_python/apache.py", line 299, in HandlerDispatch > result = object(req) > > File "/usr/lib/python2.3/site-packages/mod_python/publisher.py", line 136, in handler > result = util.apply_fs_data(object, req.form, req=req) > > File "/usr/lib/python2.3/site-packages/mod_python/util.py", line 361, in apply_fs_data > return object(**args) > > File "/var/www/html/python/search.py", line 75, in search > page = psp.PSP(req, templatefilename) > > File "/usr/lib/python2.3/site-packages/mod_python/psp.py", line 111, in __init__ > self.load_from_file() > > File "/usr/lib/python2.3/site-packages/mod_python/psp.py", line 177, in load_from_file > code = compile(source, filename, "exec") > > File "/var/www/html/templates/en/results.psp", line 20 > > for r in SongResults: > > ^ > > SyntaxError: invalid syntax > > > And then to be complete I'll also give the psp template: And a good thing too! :) > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> > <html> > <head> > <title></title> > <meta name="author" content="Wouter van Marle" > > <meta name="generator" content="screem 0.10.2" > > <meta name="keywords" content="" > > <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" > > <meta http-equiv="Content-Script-Type" content="text/javascript" > > <meta http-equiv="Content-Style-Type" content="text/css" > > <link rel="stylesheet" type="text/css" href="../../main.css" > > </head> > <body> > <h1>Search results for <%=artist%> and <%=song%></h1> > <br> > <!-- --> > <p>Found the following songs:<p> Unindent the python bits, so > <% > # now it's getting interesting: we have to display the info out of a list of tuples! > for r in SongResults: > # begin > %> > <p>Song name: <%=r[0]%>, artist: <%=r[1]%>. This song is from the album <%=r[3]%> > <% > # end (for) > %> becomes: <% # now it's getting interesting: # we have to display the info out of a list of tuples! for in SongResults: # begin %> <p>Song name: <%=r[0]%>, artist: <%=r[1]%>. This song is from the album <%=r[3]%></p> <% # end (for) %> > </body> > </html> > > > Mind: I run this out of the main python script, though psp.PSP and then > page.run(). That may make a difference as well! I haven't tested it > as .psp page, which won't work as that way I can not pass the search > results to the page. > > SongResults is a variable passed when calling the page: > page.run({"SongResults": SongResults}) > SongResults is a list of tuples, each containing four items, built up > previously. I've tested the content of that variable, and it is correct. > > Wouter. > > Regards, Jim
|