python: calling DTML-methods without quoting
Hi, I hope this is not a FAQ, but I looked for some info to no avail. If I call a DTML-Method from an other Method (e.g. <dtml-var someDTML>), HTML entities are not converted. However if I call it from python (e.g. <dtml-var "somePath.someDTML"> the entities are html_quoted. This changed with Zope 2.7.x (?). Before that DTMLMethods were not quoted when called from python. I know the easy workaround is to dtml-with to the namespace of the object and call it the zope-way. I have a customer with several large applications which run on an old Zope only for the described reason. The applications relay heavily on calling DTML-Methods to include pieces of HTML, JavaScript, etc. Changing the old code would be an enormous effort. Is there a way to patch zope to show the old behavior? Regards Chris
No. <dtml-var "somePath.someDTML"> returns a "pointer" to that object called someDTML. Not it's rendered content. <dtml-var "somePath.someDTML(_, REQUEST)"> does the same as <dtml-with somePath><dtml-var someDTML></dtml-with> (sort of) There's a big difference between <dtml-var "somePath.someDTML(_, REQUEST)"> and <dtml-var "somePath.someDTML(_, REQUEST)" html_quote> Either I didn't understand your question or this answers it for you. 2005/10/4, Chris <chris-zopemailing@gmx.de>:
Hi,
I hope this is not a FAQ, but I looked for some info to no avail.
If I call a DTML-Method from an other Method (e.g. <dtml-var someDTML>), HTML entities are not converted.
However if I call it from python (e.g. <dtml-var "somePath.someDTML"> the entities are html_quoted.
This changed with Zope 2.7.x (?). Before that DTMLMethods were not quoted when called from python.
I know the easy workaround is to dtml-with to the namespace of the object and call it the zope-way.
I have a customer with several large applications which run on an old Zope only for the described reason. The applications relay heavily on calling DTML-Methods to include pieces of HTML, JavaScript, etc. Changing the old code would be an enormous effort.
Is there a way to patch zope to show the old behavior?
Regards Chris _______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
-- Peter Bengtsson, work www.fry-it.com home www.peterbe.com hobby www.issuetrackerproduct.com
Hi Peter, sorry, I did not explain this clearly: someDTML looks like this: <b>Hello World</b> <dtml-var ZopeTime> Calling <dtml-var "somePath.someDTML"> returns the html_quoted string representation: <b>Hello World</b> <dtml-var ZopeTime> <dtml-with "somePath.someDTML"> <dtml-var foo> </dtml-with> returns <b>Hello World</b> 2005/10/04 17:29:35.199 GMT+2 As far as I remember, the "old" Zope versions did not html_quote the html entities. This is what I need in order to have the old applications run without major "search and replace". Regards, Chris Peter Bengtsson wrote:
No. <dtml-var "somePath.someDTML"> returns a "pointer" to that object called someDTML. Not it's rendered content. <dtml-var "somePath.someDTML(_, REQUEST)"> does the same as <dtml-with somePath><dtml-var someDTML></dtml-with> (sort of)
There's a big difference between <dtml-var "somePath.someDTML(_, REQUEST)"> and <dtml-var "somePath.someDTML(_, REQUEST)" html_quote>
Either I didn't understand your question or this answers it for you.
Chris wrote:
I hope this is not a FAQ, but I looked for some info to no avail.
And my answer to this FAQ, as always, is "use ZPT".
If I call a DTML-Method from an other Method (e.g. <dtml-var someDTML>), HTML entities are not converted.
This is calling and rendering whatever someDTML is...
However if I call it from python (e.g. <dtml-var "somePath.someDTML"> the entities are html_quoted.
This is likely inserting a python repr of whatever somePath.someDTML resolves too...
This changed with Zope 2.7.x (?). Before that DTMLMethods were not quoted when called from python.
Where are you calling one from python?
I know the easy workaround is to dtml-with to the namespace of the object and call it the zope-way.
Huh?
I have a customer with several large applications which run on an old Zope only for the described reason. The applications relay heavily on calling DTML-Methods to include pieces of HTML, JavaScript, etc. Changing the old code would be an enormous effort.
...but likely worth it in the long run ;-) Chris -- Simplistix - Content Management, Zope & Python Consulting - http://www.simplistix.co.uk
Chris wrote at 2005-10-4 17:00 +0200:
... If I call a DTML-Method from an other Method (e.g. <dtml-var someDTML>), HTML entities are not converted.
This calls (renders) the DTML object
However if I call it from python (e.g. <dtml-var "somePath.someDTML"> the entities are html_quoted.
this does not call (render) the DTML object but means the object itself. The using environment converts the DTML object into a string by calling "str". "str(dtmlObject)" returns the object's source -- html quoted. When you are using Python syntax ("expr" attribute), you must yourself take care of calling the object (it happens by magic when you use the "name" attribute (no Python syntax)). Note, that calling DTML objects yourself has a caveat: you must pass the two positional arguments "None, _" (in order not to loose the DTML namespace). More info in "Calling DTML objects" of <http://www.dieter.handshake.de/pyprojects/zope/book/chap3.html> -- Dieter
participants (4)
-
Chris -
Chris Withers -
Dieter Maurer -
Peter Bengtsson