[Twisted-web] My solution to appending slashes to resources

Mark Wright markscottwright at gmail.com
Wed Oct 7 11:50:02 EDT 2009

(I didn't reply to my original message because the mailing list never
sent it to me.  Yet, I can see it at the archives here
- is anyone getting these messages?)

A bit of metaprogramming to the rescue.  For those Resource classes
that you want to append slashes automatically, this seems to work.
Can anyone see any problems with this?

def append_slashes(rsc_class):
    original_getChild = rsc_class.getChild
    original_render = rsc_class.render

    def slash_appending_getChild(self, path, request):
        if path == '':
            return self
            return original_getChild(self, path, request)

    def slash_appending_render(self, request):
        if request.prepath[-1] != '':
            return ""
            return original_render(self, request)

    rsc_class.getChild = slash_appending_getChild
    rsc_class.render = slash_appending_render
    rsc_class.isLeaf = False
    return rsc_class

# test code
# entering http://localhost:8080/hello should redirect to

from twisted.internet import reactor
from twisted.python import log
from twisted.web import server, resource, static
import sys

class MyPage(resource.Resource):
    def render_GET(self, request):
        return "<html><body><p>Hello World</p></body></html>"

root = resource.Resource()
root.putChild("hello", MyPage())
site = server.Site(root)
reactor.listenTCP(8080, site)

Mark Wright
markscottwright at gmail.com

More information about the Twisted-web mailing list