On Mar 4, 2011, at 12:19 PM, Massimo Di Pierro wrote:
> 
> I agree that that is what it should do. Please open a ticket about
> this.

Are you saying (I think) that both cases should terminate on a newline (if 
present)?

> 
> On Mar 4, 11:20 am, Jonathan Lundell <jlund...@pobox.com> wrote:
>> On Mar 4, 2011, at 1:52 AM, szimszon wrote:
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>>> web2py™  Version 1.92.1 (2011-02-16 15:04:40)
>>> Python     Python 2.5.2: /usr/bin/python
>> 
>>> Traceback (most recent call last):
>>>  File "/home/szimszon_nfs/web2py/gluon/restricted.py", line 186, in
>>> restricted
>>>    ccode = compile2(code,layer)
>>>  File "/home/szimszon_nfs/web2py/gluon/restricted.py", line 173, in
>>> compile2
>>>    return compile(code.rstrip().replace('\r\n','\n')+'\n', layer,
>>> 'exec')
>>>  File "/home/szimszon_nfs/web2py/applications/serveradmin/views/
>>> integrity/ftp.html", line 123
>>>    pass
>>>       ^
>>> SyntaxError: invalid syntax
>> 
>>> if msg:
>>>    response.write('\n<h2>', escape=False)
>>>    response.write(T("Commands executed"))
>>>    response.write('</h2>\n', escape=False)
>>>    response.write(XML(msg)
>>>    pass
>> 
>>> My template was working until now (I don't know exactly from what
>>> web2py version is it bad).
>> 
>>> My template was:
>> 
>>> {{if msg:}}
>>> <h2>{{=T("Commands executed")}}</h2>
>>> {{ =XML(msg)
>>> pass
>>> try:
>>>  dname=request.args[1]
>>> except:
>>>  dname=0
>>> pass
>>> editname=T('New')}}
>> 
>> Thadeus might want to chime in here if I have the details wrong (there 
>> really ought to be a formal reference for template syntax; the tutorial in 
>> the book is nice, but not complete).
>> 
>> There's a subtle difference in template parsing when =something appears at 
>> the beginning of an escaped block (where "beginning" ignores white space, so 
>> =XML above is regarded as being at the beginning of the code block).
>> 
>> You probably know already that =something is translated to 
>> response.write(something). But the question arises, what exactly is 
>> "something"? That is, where does it end?
>> 
>> And when the '=something' is found at the beginning of a code block, 
>> 'something' is defined to be *everything until the end of the code block*.
>> 
>> When '=something' is found *embedded* in a code block (not at the beginning, 
>> ignoring white space), then the end of 'something' is either the next 
>> newline or the end of the code block, whichever comes first.
>> 
>> So (to shorten up the problem here), you've effectively got this:
>> 
>> {{=msg
>> pass}}
>> 
>> ...which becomes:
>> 
>> response.write(msg
>> pass)
>> 
>> ...and Python is going to object.
>> 
>> On the other hand, if you had written:
>> 
>> {{if xyz:
>> =msg
>> pass}}
>> 
>> The output will be:
>> 
>> if xyz:
>>     response.write(msg)
>>     pass
>> 
>> ...and everybody's happy. Because =msg wasn't the first thing in the code 
>> block, only msg gets included in the response.write argument.
>> 
>> Is there a good reason for =something to be interpreted two different ways? 
>> I'm not sure it's intentional. Thadeus? Massimo?
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>>> Now I had to modify:
>> 
>>> {{if msg:}}
>>> <h2>{{=T("Commands executed")}}</h2>
>>> {{ =XML(msg)}}                  < -----
>>> {{pass                 <-----------
>>> try:
>>>  dname=request.args[1]
>>> except:
>>>  dname=0
>>> pass
>>> editname=T('New')}}


Reply via email to