[Zope] RESPONSE.write
    Dieter Maurer 
    dieter at handshake.de
       
    Wed Nov  5 16:37:32 EST 2003
    
    
  
Jure Koren wrote at 2003-11-1 18:38 +0100:
 > ...
 > I do this using calls to RESPONSE.write().
 > 
 > However, I've found out that it is impossible to use the
 > dtml-var tag in any dtml method i call from this python
 > script.
 > 
 > For example, in dtml method fetch_header i call this:
 > <dtml-var standard_html_header>
 > 
 > And I call fetch_header from fetch python script like this:
 > response.write(context.fetch_header(client=context, REQUEST=request))
This looks correct and should work (provided, you defined "request").
 > If I remove the <dtml-var> and replace it with what the
 > standard_html_header dtml method contains, it works. If
 > there is a dtml-var tag, it breaks, and when it happens,
 > the connection to the browser is closed immediately, and
 > since using streaming mode by calling RESPONSE.write()
 > does not allow raising exceptions, I don't know what is
 > failing. There is no useful debugging information stored
 > anywhere that I know of. No exceptions are raised, or if
 > they are, dtml-try and try:... except: don't catch them.
Provided, you are using Zope 2.6.x (or later),
you may see something in "/error_log" (in your Zope "Root Folder")
If this does not help, replace the "response.write" with a "return".
 > Is there a document describing the behaviour of zope using
 > this RESPONSE.write() technique, with explanations of what
 > parts of zope are safe to use in this mode, and when?
It is not documented thoroughly, but it does the obvious:
  If not yet done, it emits the response header and body collected
  so far and then its argument.
Note, that "HTTP 1.1" requires a correct "Content-Length"
for "Keep alive" connections. When "Content-Length"
is not yet set, Zope computes the "Content-Length"
from the information it knows so far. Usually, this is
wrong for "RESPONSE.write". This may be a good reason why
the browser ends the response prematurely.
Use a TCP logger (e.g. Shane's "tcpwatch") to check the
HTTP response headers.
-- 
Dieter
    
    
More information about the Zope
mailing list