Hi all, I'm working on a site navigation product. For the rendering I've got some rendering methods that the site owner can customize. This way the rendering methods aren't hard coded in python. Now I've got a problem as someone removes one of these methods. Here's a snippet of code for a tree site menu: # test if a tree menu has to be generated if self.mode=='tree': # test if the current item is active if self.isactive(objectid,newcontextid): # seperate method to test for dtml rendering-method if self.methodTestOk('tree_item_active'): # call the dtml-method from python return self.NavItem(self.tree_item_active) else: # the current item is inactive # test if dtml rendering-method isn't deleted if self.methodTestOk('tree_item_link'): # call the dtml-method from python return self.NavItem(self.tree_item_link) def NavItem(self, dtmlmethod): return self.call( dtmlmethod, client=self, REQUEST=self.REQUEST) def call(self, f, *args, **kw): try: return apply(f,args, kw) except: import sys raise sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2] def methodTestOk(self, methodname): if hasattr(self, methodname): return 1 else: return 0 This is an example of a dtml-rendering method (the current object is given as an argument to the method): <tr> <td> <a href="<dtml-var absolute_url>"><dtml-var title_or_id></a> </td> </tr> Maybe someone knows an other way to call dtml-methods from python. The problem with my code is that I don't get any error message if one of the methods is deleted. I get a None object back. Is it possible that methodTestOk returns the errormessage? Can someone help me with my problem? Greetz Nico
Nico de Boer writes:
... if self.methodTestOk('tree_item_active'): # call the dtml-method from python return self.NavItem(self.tree_item_active) ... The problem with my code is that I don't get any error message if one of the methods is deleted. I get a None object back. Is it possible that methodTestOk returns the errormessage? Sure, you use
if methodTestOk(...): return ... else: raise AttributeError, what_is_missing Of course, you would use a different exception, when it fits better. Dieter
participants (2)
-
Dieter Maurer -
Nico de Boer