[Twisted-web] nevow.liveevil question (dynamically adding a link with its own handler)

David Moore djm at software.net.nz
Sun Dec 19 13:05:01 MST 2004

I'm working on a project[1] which will require very dynamic webpages. 
I'm very excited to discover nevow.liveevil (I'd rather program in
Python than JavaScript).

But I'm having trouble dynamically adding a link which can then call
further Python code.

My code....
from nevow import rend
from nevow import loaders
from nevow import tags
from nevow import liveevil
from twisted.internet import reactor

def adder(client):
#    newLink = loaders.stan(tags.a(href="#")["Nothing"])
    newLink = loaders.stan(tags.a(href="#", 
    client.append('content', newLink)

mycontent = loaders.stan(
        tags.a(href="#", onclick=liveevil.handler(adder))["Add"],
mypage = rend.Page(docFactory=mycontent)
mypage.addSlash = True

mysite = liveevil.LiveSite(mypage)
reactor.listenTCP(8080, mysite)

When I click on the Add link I get
Traceback (most recent call last):
  File "br.py", line 28, in ?
  File "/usr/lib/python2.3/site-packages/twisted/internet/default.py", line 126, in run
  File "/usr/lib/python2.3/site-packages/twisted/internet/default.py", line 134, in mainLoop
--- <exception caught here> ---
  File "/usr/lib/python2.3/site-packages/twisted/internet/base.py", line 423, in runUntilCurrent
    call.func(*call.args, **call.kw)
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/liveevil.py", line 101, in handleInput
    self.events.publish(identifier, *(self, ) + args)
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/events.py", line 41, in publish
  File "br.py", line 12, in adder
    client.append('content', newLink)
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/liveevil.py", line 130, in append
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/liveevil.py", line 112, in flt
    fl = flatten(stan, ctx=ctx)
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/flat/ten.py", line 146, in flatten
    list(iterflatten(stan, ctx, result.append))
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/flat/ten.py", line 104, in iterflatten
    for item in gen:
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/flat/flatstan.py", line 84, in TagSerializer
    yield serialize(toBeRenderedBy, context)
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/flat/ten.py", line 91, in serialize
    return partialflatten(context, obj)
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/flat/ten.py", line 82, in partialflatten
    return flattener(obj, context)
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/flat/flatstan.py", line 168, in FunctionSerializer
    data = convertToData(context.locate(IData), context)
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/context.py", line 100, in locate
    return self.parent.locate(interface, depth)
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/context.py", line 203, in locate
    return WebContext.locate(self, interface, depth)
  File "/usr/lib/python2.3/site-packages/Nevow/nevow/context.py", line 99, in locate
    raise KeyError, "Interface %s was not remembered." % key
exceptions.KeyError: 'Interface nevow.inevow.IData was not remembered.'
I don't get this problem if I replace the AddAnother link with the Nothing 
link (as commented out in the code.)

Is this expected-behaviour, a bug in my code, or a bug in liveevil????

Any help would be greatly appreciated.


[1] https://eduforge.org/projects/exe E-learning XML Editor

 (o_    David Moore
 //\    LinuxSoftware - Custom software development for Linux!
 V_/_   http://www.linuxsoftware.co.nz

More information about the Twisted-web mailing list