Mercurial > hg > genshi_view
view genshi_view/template/+package+/+package+.py_tmpl @ 0:b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
author | k0s <k0scist@gmail.com> |
---|---|
date | Tue, 27 Oct 2009 15:11:43 -0400 |
parents | |
children | d9519f40c177 |
line wrap: on
line source
""" ${project}: a view with webob """ from genshi.template import TemplateLoader from paste.fileapp import FileApp from pkg_resources import resource_filename from webob import Request, Response, exc class ${project.title()}View(object): ### class level variables defaults = { 'auto_reload': 'False'} def __init__(self, **kw): # 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' # methods to respond to self.response_functions = { 'GET': self.get, 'POST': self.post, } # static files self.htdocs = resource_filename(__name__, 'static') # template loader templates_dir = resource_filename(__name__, 'templates') self.loader = TemplateLoader(templates_dir, auto_reload=self.auto_reload) ### methods dealing with HTTP def __call__(self, environ, start_response): request = Request(environ) filename = os.path.join(self.htdocs, request.path_info) if request.path_info != '/' and os.path.exists(filename): fileapp = FileApp(filename) return fileapp(environ, start_response) res = self.make_response(request) return res(environ, start_response) def make_response(self, request): return self.response_functions.get(request.method, self.error)(request) def get_response(self, text, content_type='text/html'): """make an HTTP response from text""" res = Response(content_type=content_type, body=text) return res def get(self, request): """ return response to a GET requst """ # template data dictionary data = { 'subject': request.GET.get('subject', 'world') } # render the template template = self.loader.load('helloworld.html') res = template.generate(**data).render('html', doctype='html') # generate the response return self.get_response(res) def post(self, request): """ return response to a POST request """ return exc.HTTPOk("Ok") def error(self, request): """deal with non-supported methods""" return exc.HTTPMethodNotAllowed("Only %r operations are allowed" % self.response_functions.keys())