[Twisted-web] Page object design: wrapping a dictionary
containing data
Matt Goodall
matt at pollenation.net
Sun Jan 23 03:27:23 MST 2005
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
More information about the Twisted-web
mailing list