Source code for ramverk.genshi

from __future__         import absolute_import
from genshi.template    import TemplateLoader, loader, Context
from werkzeug.utils     import cached_property
from ramverk.templating import TemplatingMixin


[docs]class GenshiMixin(TemplatingMixin): """Add Genshi templating to an application.""" #: Serializer used by :meth:`render`. serializer = 'html' #: Doctype used by :meth:`render`. doctype = 'html5' @cached_property def __loader(self): """A :func:`~genshi.template.loader.package` :class:`~genshi.template.loader.TemplateLoader` for the ``templates/`` directory under the module of the application.""" return TemplateLoader([loader.package(self.module, 'templates')], auto_reload=self.settings.debug, callback=self.template_loaded)
[docs] def template_loaded(self, template): """Called when `template` is first loaded; override to do Babel and Flatland installation and such.""" pass
[docs] def render(self, template_name, **context): """Render `template_name` in `context` to a response.""" context = self.create_template_context(context) # Need this to pass 'self' to generate() genshi_context = Context() genshi_context.update(context) template = self.__loader.load(template_name) stream = template.generate(genshi_context) rendering = stream.render(self.serializer, doctype=self.doctype) return self.response(rendering)

Project Versions