
On Sun, 2005-01-23 at 20:12 +1100, Mary Gardiner wrote:
I've got a Page object that derives all its data from a dictionary, eg:
{ 'project_name': 'project', 'project_description': 'hello', # ... you get the idea }
What's a good way for the Page object to wrap that dictionary that doesn't involve doing this:
def data_name(self, ctx, data): return self.d['project_name']
def data_description(self, ctx, data): return self.d['project_description']
# and so on for every key in the dictionary
I vaguely recall that the equivalent of this used to be possible in Woven:
def data_project(self, ctx, data): return self.d
and then that the data items were accessible by (say) stan.directive("project/project_name"). This doesn't look like its supported in Nevow. Is this correct? What alternative designs are there for something like this?
If a dict is the currently in scope data (the IData) for a template then nested data directives will look inside the dict (see accessors.DictionaryContainer for details): <div n:data="personAsDict"> <p n:data="name">...</p> <p n:data="address">...</p> </div> In that example, the 'name' and 'address' directives are equivalent to personAsDict['name'] and personAsDict['address'] respectively. There's also the mapping render (rend.mapping) That fills slots with the content of the dict: <div n:data="personAsDict" n:render="mapping"> <p><n:slot name="name" /></p> <p><n:slot name="address" /></p> </div> Hope this helps. Cheers, Matt