[Zope] zpt encoding and content-type
Bernd Dorn
zope-mailinglist at mopa.at
Thu Oct 23 06:33:23 EDT 2003
Dieter Maurer wrote:
> Bernd Dorn wrote at 2003-10-22 11:07 +0200:
> > i use PageTemplateFile in my python product. now I'm wondering if there
> > is some way to redefine the content-type and the encoding of the
> > response object in the file
> >
> > i tried the suggestion on zopelabs, to set it like the following
> > somewhere in a tal:replace::
> >
> > python:request.response.setHeader ...
>
> I should give you an "AttributeError", as "response" needs to
> be spelled "RESPONSE".
>
this is not true, because the response object is in the attribute
'response' of the request, it is just called RESPONSE if it is catched
as a kw argument
> > but this does not affect my response.
>
> There has been a bug in earlier PageTemplate versions
> which were overriding a given "Content-Type".
>
> This bug should be fixed in Zope 2.6.2.
>
> > it seems that PageTemplateFile
> > always uses text/xml if an xml PI is on the top of the source file. It
> > sniffs the content-type from the PI.
> >
> > what I basically want to do is, to define the encoding in the xml PI
> > (e.g <?xml version="1.0" encoding="iso-8859-1"?>) so that I dont get
> > unicode conversion errors (ascii out of range ...) when the file is read
> > but this results in a text/xml content type
>
> I do not think that the XML declaration is generated automatically.
> You must do it which the correct "encoding".
>
> When you know that you are strictly working in an "iso-8859-1" context,
> you can set Python's default encoding to "iso-8859-1"
> ("sys.setdefaultencoding") in your
> "sitecustomize.py" file. Read the "site.py" documentation, for details.
> Be warned, that some of the Python Gods do not like this feature
> and my drop it sometimes in the future.
>
> Otherwise, ensure that all non-ASCII strings are unicode strings
> and set the correct "Content-Type" header (including the correct
> charset). In this case, ZPublisher should automatically
> encode the result correctly. Search for "unicode support" on Zope.org.
>
>
> Dieter
thanks for your responses
is now figured out, that this statement in a tal:define attribute works
xxx python:request.response.setHeader('content-type','text/html')
but if an xml declaration is given in the source, the content-type is
always text/xml in the output, because PageTemplateFile sniffs and sets
the content type after rendering the content i think
the problem for me is not actually the encoding of the pt file, it is
the encoding of the attributes of zope objects (e.g. title), which i
always have to convert to unicode if a non ascii charecter is in and if
the attribute is not a unicode one.
only if i set the encoding in the xml declaration it works without
converting , but then the result is also xml, what is not what i want,
because browsers display the result differently then.
it would be convinient if PageTemplateFile could be instantiated with a
given encoding and result content-type like in the PageTemplate of the ZMI
changing the default encoding of python is also not possible, because
this affects 4 other zope instances,hm
i think i gonna subclass PageTemplateFile and override the default behaviour
either way, thanks for your responses, bernd
More information about the Zope
mailing list