summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wanstrath <chris@ozmm.org>2009-10-30 11:01:25 -0700
committerChris Wanstrath <chris@ozmm.org>2009-10-30 11:01:25 -0700
commit59ece1feffa1bec378c968de9a39842b4190897b (patch)
treef1f35843c0842af8d1abe2220d56849dcd8b30c2
parente822dab9fdd09e6c0aa61adb4232e5fa783f355c (diff)
downloadpystache-59ece1feffa1bec378c968de9a39842b4190897b.tar.gz
basic subclassable view support
-rw-r--r--examples/__init__.py0
-rw-r--r--examples/simple.mustache1
-rw-r--r--examples/simple.py7
-rw-r--r--pystache/__init__.py1
-rw-r--r--pystache/view.py41
-rw-r--r--tests/test_view.py16
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!")