diff --git a/tornado/template.py b/tornado/template.py index 67b17335..465d210d 100644 --- a/tornado/template.py +++ b/tornado/template.py @@ -195,6 +195,22 @@ class Loader(object): return self.templates[name] +class DictLoader(object): + """A template loader that loads from a dictionary.""" + def __init__(self, dict): + self.dict = dict + self.templates = {} + + def reset(self): + self.templates = {} + + def load(self, name, parent_path=None): + if name not in self.templates: + self.templates[name] = Template(self.dict[name], name=name, + loader=self) + return self.templates[name] + + class _Node(object): def each_child(self): return () diff --git a/tornado/test/template_test.py b/tornado/test/template_test.py index 66a31291..d6ebc71a 100644 --- a/tornado/test/template_test.py +++ b/tornado/test/template_test.py @@ -1,4 +1,4 @@ -from tornado.template import Template +from tornado.template import Template, DictLoader from tornado.testing import LogTrapTestCase class TemplateTest(LogTrapTestCase): @@ -6,3 +6,26 @@ class TemplateTest(LogTrapTestCase): template = Template("Hello {{ name }}!") self.assertEqual(template.generate(name="Ben"), "Hello Ben!") + + def test_include(self): + loader = DictLoader({ + "index.html": '{% include "header.html" %}\nbody text', + "header.html": "header text", + }) + self.assertEqual(loader.load("index.html").generate(), + "header text\nbody text") + + def test_extends(self): + loader = DictLoader({ + "base.html": """\ +