[mod_python] psp problem

Wouter van Marle wouter at squirrel-systems.com
Wed May 11 23:50:59 EDT 2005


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:

<!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>
		<%
		# 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)
		%>
	</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.




More information about the Mod_python mailing list