import UserDict from zope.interface import classProvides from zope.interface import implements from zope.interface import Interface from zope.interface import Attribute from repoze.bfg.interfaces import IViewFactory from repoze.bfg.interfaces import IView from webob import Response class IBlogModel(Interface): id = Attribute('id') class BlogModel(UserDict): implements(IBlogModel) def __init__(self, id): self.id = id class View(object): classProvides(IViewFactory) implements(IView) def __init__(self, context, request): self.context = context self.request = request class BlogDefaultView(View): def __call__(self): return Response('Hello world from the blog %s!' % self.context.id) class BlogWooHooView(View): def __call__(self): return Response('Woo hoo from the blog named %s!' % self.context.id) class DefaultView(View): def __call__(self): return Response('Default page, context is %s' % self.context) if __name__ == '__main__': from repoze.bfg.interfaces import IViewFactory from repoze.bfg.interfaces import IRequest from zope.component import getGlobalSiteManager gsm = getGlobalSiteManager() gsm.registerAdapter(BlogDefaultView, (IBlogModel, IRequest), IViewFactory) gsm.registerAdapter(BlogWooHooView, (IBlogModel, IRequest), IViewFactory, name='woohoo.html') gsm.registerAdapter(DefaultView, (None, IRequest), IViewFactory, '') from repoze.bfg.router import make_app root = {'blog':BlogModel('myblog')} def get_root(environ): return root app = make_app(get_root) from paste import httpserver httpserver.serve(app, host='0.0.0.0', port='5432')