|
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
|