diff options
author | Chris Wanstrath <chris@ozmm.org> | 2009-10-30 11:01:25 -0700 |
---|---|---|
committer | Chris Wanstrath <chris@ozmm.org> | 2009-10-30 11:01:25 -0700 |
commit | 59ece1feffa1bec378c968de9a39842b4190897b (patch) | |
tree | f1f35843c0842af8d1abe2220d56849dcd8b30c2 | |
parent | e822dab9fdd09e6c0aa61adb4232e5fa783f355c (diff) | |
download | pystache-59ece1feffa1bec378c968de9a39842b4190897b.tar.gz |
basic subclassable view support
-rw-r--r-- | examples/__init__.py | 0 | ||||
-rw-r--r-- | examples/simple.mustache | 1 | ||||
-rw-r--r-- | examples/simple.py | 7 | ||||
-rw-r--r-- | pystache/__init__.py | 1 | ||||
-rw-r--r-- | pystache/view.py | 41 | ||||
-rw-r--r-- | tests/test_view.py | 16 |
6 files changed, 66 insertions, 0 deletions
diff --git a/examples/__init__.py b/examples/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/__init__.py diff --git a/examples/simple.mustache b/examples/simple.mustache new file mode 100644 index 0000000..15a2d49 --- /dev/null +++ b/examples/simple.mustache @@ -0,0 +1 @@ +Hi {{thing}}!
\ No newline at end of file diff --git a/examples/simple.py b/examples/simple.py new file mode 100644 index 0000000..f10f37b --- /dev/null +++ b/examples/simple.py @@ -0,0 +1,7 @@ +import pystache + +class Simple(pystache.View): + template_path = 'examples' + + def thing(self): + return "world" diff --git a/pystache/__init__.py b/pystache/__init__.py index 5b22cca..913dc61 100644 --- a/pystache/__init__.py +++ b/pystache/__init__.py @@ -1,4 +1,5 @@ from pystache.template import Template +from pystache.view import View def render(template, context={}, **kwargs): context = context.copy() diff --git a/pystache/view.py b/pystache/view.py new file mode 100644 index 0000000..26ec8eb --- /dev/null +++ b/pystache/view.py @@ -0,0 +1,41 @@ +import pystache +import os.path + +class View(object): + # Path where this view's template(s) live + template_path = '.' + + # Extension for templates + template_extension = 'mustache' + + # Absolute path to the template itself. Pystache will try to guess + # if it's not provided. + template_file = None + + # Contents of the template. + template = None + + def __init__(self, template=None, context={}, **kwargs): + self.template = template + self.context = context + + for key in kwargs: + self.context[key] = kwargs[key] + + def load_template(self): + if self.template: + return self.template + + if not self.template_file: + name = self.template_name() + '.' + self.template_extension + self.template_file = os.path.join(self.template_path, name) + + return open(self.template_file, 'r').read() + + def template_name(self): + return self.__class__.__name__ + + def render(self): + template = self.load_template() + return pystache.render(template, self.context) + diff --git a/tests/test_view.py b/tests/test_view.py new file mode 100644 index 0000000..f55ed12 --- /dev/null +++ b/tests/test_view.py @@ -0,0 +1,16 @@ +import unittest +import pystache +from examples.simple import Simple + +class TestView(unittest.TestCase): + def test_basic(self): + view = Simple("Hi {{thing}}!", { 'thing': 'world' }) + self.assertEquals(view.render(), "Hi world!") + + def test_kwargs(self): + view = Simple("Hi {{thing}}!", thing='world') + self.assertEquals(view.render(), "Hi world!") + + def test_template_load(self): + view = Simple(thing='world') + self.assertEquals(view.render(), "Hi world!") |