Sometimes it may be convenient to let Quixote itself deal with static files when they are part of the same URL space as the dynamic content. I've enclosed a module to map static files into Quixote. Here are a couple of usage examples (assuming filesystem_base_path has been set appropriately). Mapping a complete filesytem folder containing static files: notes = FilesystemFolder(os.path.join(filesystem_base_path, 'notes')) Mapping an individual filesystem file. (Because 'stylesheet.css' isn't a valid identifier name, we need to use setattr to set it as an attribute of the current module.) filepath = os.path.join(filesystem_base_path, 'stylesheet.css') setattr(sys.modules[__name__], 'stylesheet.css', FilesystemFile(filepath)) Hamish Lawson === filesystem.py =========================================================== import quixote, os, mimetypes class FilesystemFile: """ Represents a file on the filesystem as a callable instance. The MIME type of the resulting response is computed from the file's extension. """ def __init__(self, path): self.path = path self.mimetype = mimetypes.guess_type(os.path.basename(self.path), 0)[0] f = open(self.path) self.contents = f.read() f.close() def __call__(self, request): request.response.set_header('Content-Type', self.mimetype) return self.contents class FilesystemFolder: """ Represents a folder on the filesystem as a Quixote namespace. Items in the folder are found through _q_getname, and can result in either FilesystemFile or FilesystemFolder instances. A basic index page can be generated, listing the contents of the folder." """ _q_exports = [] def __init__(self, path): self.path = path def _q_index(self, request): output = [] output.append("%s
" % request.environ['REQUEST_URI']) for filename in os.listdir(self.path): filepath = os.path.join(self.path, filename) indicator = os.path.isdir(filepath) and "/" or "" output.append( '%(filename)s%(indicator)s' % locals() ) return "\n".join(output) def _q_getname(self, request, name): filepath = os.path.join(self.path, name) if os.path.exists(filepath): if os.path.isdir(filepath): return FilesystemFolder(filepath) else: return FilesystemFile(filepath)(request) else: raise quixote.errors.TraversalError(name)