diff --git a/simplewiki/dispatcher.py b/simplewiki/dispatcher.py --- a/simplewiki/dispatcher.py +++ b/simplewiki/dispatcher.py @@ -1,16 +1,16 @@ """ request dispatcher: data persisting across requests should go here """ import os -from handlers import GenshiRenderer +from handlers import GenshiRenderer, Index from genshi.template import TemplateLoader from paste.fileapp import FileApp from pkg_resources import resource_filename from webob import Request, Response, exc class Dispatcher(object): @@ -25,17 +25,17 @@ class Dispatcher(object): # set instance parameters from kw and defaults for key in self.defaults: setattr(self, key, kw.get(key, self.defaults[key])) self.auto_reload = self.auto_reload.lower() == 'true' assert self.directory and os.path.exists(self.directory), "Must specify an existing directory" # request handlers - self.handlers = [ GenshiRenderer ] + self.handlers = [ GenshiRenderer, Index ] # template loader self.template_dirs = self.template_dirs.split() self.template_dirs.append(resource_filename(__name__, 'templates')) self.loader = TemplateLoader(self.template_dirs, auto_reload=self.auto_reload) def __call__(self, environ, start_response): diff --git a/simplewiki/handlers.py b/simplewiki/handlers.py --- a/simplewiki/handlers.py +++ b/simplewiki/handlers.py @@ -79,13 +79,40 @@ class GenshiRenderer(Handler): raise HandlerMatchException self.data = { 'request': request, 'link': self.link } def __call__(self): return getattr(self, self.request.method.title())() def Get(self): - # needs to have self.template set template = self.app.loader.load(self.template) return Response(content_type='text/html', body=template.generate(**self.data).render('html')) + +class Index(Handler): + + template = 'index.html' + + def __init__(self, app, request): + Handler.__init__(self, app, request) + self.directory = os.path.join(app.directory, *request.environ['path']) + if not os.path.isdir(self.directory): + raise HandlerMatchException + path = request.environ['path'] + files = [] + files = os.listdir(self.directory) + self.data = { 'request': request, + 'link': self.link, + 'directory': '/' + '/'.join(path), + 'files': files } + + def __call__(self): + return getattr(self, self.request.method.title())() + + def Get(self): + if not self.request.path_info.endswith('/'): + self.redirect(self.request.path_info + '/') + template = self.app.loader.load(self.template) + return Response(content_type='text/html', + body=template.generate(**self.data).render('html')) + diff --git a/simplewiki/templates/index.html b/simplewiki/templates/index.html --- a/simplewiki/templates/index.html +++ b/simplewiki/templates/index.html @@ -1,22 +1,16 @@
-