[Zope] How to override DTMLFile?

Peter Bengtsson mail@peterbe.com
Fri, 23 May 2003 12:57:04 +0100


I want to override DTMLFile from Globals in my own special product.
I managed to do this::

class PeterDTMLFile(DTMLFile):
     def foo(self):
         return "works"


Then from somewhere else I do::

manage_edit = PeterDTMLFile('dtml/manage_edit', globals())

This works but doing <dtml-var foo> raises a KeyError.

I've looked at Localizer and how they override DTMLFile's __init__ and 
_exec method.
But if I try to do::

# pointless inheritance hack but for testing
class PeterDTMLFile(DTMLFile):
     def __init__(self, name, _prefix=None, **kw):
         apply(DTMLFile.inheritedAttribute('__init__'),
               (self, name, _prefix), kw)

Which in effect is pretty pointless, I get the following error when trying 
my manage_edit::


Traceback (innermost last):
   Module ZPublisher.Publish, line 98, in publish
   Module ZPublisher.mapply, line 62, in mapply
AttributeError: 'None' object has no attribute 'co_varnames'


So, can anybody tell me how to override the DTMLFile class (and possible 
also the PageTemplateFile)

Grateful,
Peter