From 00133d48c4c58c99233a424925ea834f3f69b486 Mon Sep 17 00:00:00 2001 From: Marcel Hellkamp Date: Fri, 7 Oct 2011 14:32:45 +0200 Subject: Added three new functions to the SimpleTemplate default namespace: * get() works like dict.get() on the namespace. * setdefault() works similar, but sets the value if not defined. * defined() checks if a name exists in the current namespace. --- bottle.py | 3 ++- test/test_stpl.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/bottle.py b/bottle.py index 0785a38..db13ee2 100755 --- a/bottle.py +++ b/bottle.py @@ -2684,7 +2684,8 @@ class SimpleTemplate(BaseTemplate): env = self.defaults.copy() env.update({'_stdout': _stdout, '_printlist': _stdout.extend, '_include': self.subtemplate, '_str': self._str, - '_escape': self._escape}) + '_escape': self._escape, 'get': env.get, + 'setdefault': env.setdefault, 'defined': env.__contains__}) env.update(kwargs) eval(self.co, env) if '_rebase' in env: diff --git a/test/test_stpl.py b/test/test_stpl.py index 2e6bfdc..ed3d5d7 100755 --- a/test/test_stpl.py +++ b/test/test_stpl.py @@ -160,6 +160,21 @@ class TestSimpleTemplate(unittest.TestCase): result=u'+base+\n+main+\n!1234!\n+include+\n-main-\n+include+\n-base-\n' self.assertEqual(result, t.render(content='1234')) + def test_get(self): + t = SimpleTemplate(source='{{get("x", "default")}}') + self.assertEqual('1234', t.render(x='1234')) + self.assertEqual('default', t.render()) + + def test_setdefault(self): + t = SimpleTemplate(source='%setdefault("x", "default")\n{{x}}') + self.assertEqual('1234', t.render(x='1234')) + self.assertEqual('default', t.render()) + + def test_defnied(self): + t = SimpleTemplate(source='{{x if defined("x") else "no"}}') + self.assertEqual('yes', t.render(x='yes')) + self.assertEqual('no', t.render()) + def test_notfound(self): """ Templates: Unavailable templates""" self.assertRaises(TemplateError, SimpleTemplate, name="abcdef") -- cgit v1.2.1