[Twisted-web] operating on literals in nevow html templates

Donovan Preston dp at ulaluma.com
Tue Apr 13 15:31:54 MDT 2004


On Apr 12, 2004, at 4:59 PM, Joe Bowers wrote:

<snip>

> It's acceptable for me to bend, fold, or otherwise
> mutilate the designer-provided tag to some degree, so
> something like:
>
> <a href="GUI_GENERATED_CALL(garbage, 'WindowName', 'WindowParams')"
>    nevow:data="{'name' : 'WindowName', 'params' : 'WindowParams'}"
>    nevow:render="dynamicPopup"
>> Click here for a popup</a>
>
> would be fine- but the literal parameters I need to
> preserve need to be under the control of the designers
> and present in the template rather than in the code.

There is an experimental feature in the Nevow codebase that probably 
not too many people know about. I call them render parameters. They 
were designed for almost exactly this use, to allow designers to 
provide parameters to a renderer which will affect how it renders. The 
syntax is a bit odd and probably still open for discussion, but it is 
currently:

<a nevow:render="dynamicPopup WindowName,WindowParams">Click here</a>

The renderer name and arguments are separated by a space; the 
individual arguments are separated by commas. The arguments would be 
sent to the render method like so:

def render_dynamicPopup(self, name, params):
	print name, params
	return "woo"

Since you probably also want access to the context and data parameters 
normally passed to a renderer, you probably want to create and return a 
closure (nested function) which gets ctx and data:

def render_dynamicPopup(self, name, params):
	def nestedFunction(ctx, data):
		print name, params, ctx, data # has access to name and params because 
they are "closed over"
		return "woo"
	return nestedFunction

This is still a somewhat experimental feature; there is an example of 
usage in "sandbox/mg/reroot.py". If you try it out, please give us 
feedback on whether it solves your problem, how useful it is, and 
whether the syntax or semantics could be improved to make it more 
useful.

dp




More information about the Twisted-web mailing list