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 ()
-from tornado.template import Template
+from tornado.template import Template, DictLoader
from tornado.testing import LogTrapTestCase
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": """\
+<title>{% block title %}default title{% end %}</title>
+<body>{% block body %}default body{% end %}</body>
+""",
+ "page.html": """\
+{% extends "base.html" %}
+{% block title %}page title{% end %}
+{% block body %}page body{% end %}
+""",
+ })
+ self.assertEqual(loader.load("page.html").generate(),
+ "<title>page title</title>\n<body>page body</body>\n")